将参数传递给codeigniter控制器

时间:2014-01-03 16:31:10

标签: codeigniter parameters get controller

如何通过URL传递给codeigniters控制器一个参数? 我使用IgnitedTables来显示jquery DataTable。实际上我使用ajax填充表(cms_datatable())我想以某种方式通过url传递一个语言参数来过滤语言上的内容

我有以下

public function cms($cms_lang = '') {

    $this->cms_lang = $this->session->userdata('cms_lang');
    if(isset($cms_lang)){
        $this->cms_lang['current_lang'] = $cms_lang;
    } else {
        $this->cms_lang['current_lang'] = 'de';
    }

        $tmpl = array('table_open' => '<table id="cms_table" border="0" cellpadding="2" cellspacing="2" class="table table-striped table-primary table-condensed">');
        $this->table->set_template($tmpl);
        $this->table->set_heading('<input name="id[]" type="checkbox">', 'Title', 'SEF URL', 'Letztens bearbeitet', 'Status');
        $this->load->view('admin/admin', $this->data);
    }

    public function cms_datatable() {
    error_reporting(-1);
    // var_dump($this->cms_lang['current_lang']); returns NULL
    $this->datatables->select('id,title,sef_title, creation_date,status')            
            ->edit_column('title', '<a href="/admin/dashboard/edit_post/$1">$2</a>', 'id, title')
            ->unset_column('creation_date')
            ->add_column('creation_date', '<span class="label label-danger">$1</span>', 'creation_date')
            ->unset_column('status')
            ->add_column('status', get_buttons('$1'), 'id')
            ->from('ci_content')
            ->where('language', $this->cms_lang);
    echo $this->datatables->generate();
}

比我尝试覆盖变量$lang的默认值,如

domain/admin/cms/en

但我的var_dump($lang)显示了defualt值

路由为

$route['admin/cms']  = "admin/dashboard/cms";
$route['admin/cms/(:any)']  = "admin/dashboard/cms/$1";

1 个答案:

答案 0 :(得分:2)

你的控制器 fn名称为cms_datatable,但你没有打电话。

尝试使用网址:

$route['admin/cms']         = "admin/dashboard/cms_datatable";
$route['admin/cms/(:any)']  = "admin/dashboard/cms_datatable/$1";

该路线假定:

  • 管理员是您的文件夹
  • 信息中心是您的控制器
  • cms_datatable 是您的控制器fn

同样,重新阅读你的问题,我不确定你为什么要将语言变量传递给EACH控制器?只需在会话中设置它并检查它。如果会话定义了不同的语言,则覆盖默认值。让每个控制器检查这不是一个好的形式。