将变量从一个控制器方法传递到另一个控制器方法

时间:2012-09-19 22:09:32

标签: php jquery codeigniter shared-state

我正在使用CodeIgniter框架。我加载了一个主视图,其中包含几个选项卡,通过AJAX加载<div>中的其他视图。我的控制器类看起来像这样:

class MainController extends MY_Controller
    function main($id=0)
    {
        $this->load->model('main_model');
        $this->data['info'] = $this->main_model->foo($id);
        $this->load->view('main_view', $this->data);
    }

    function tab1()
    {
        $this->load->view('tab1_view', $this->data);
    }

}

我通过调用mywebapp/main/123加载主页面。 id可以在main方法和main_view中使用。但是,当我点击该标签时,我想在id <div>中使用main_view。最好的方法是什么?也许有办法让这个变量对控制器中的每个方法都是全局的吗?

我使用jQuery加载选项卡:

$("#div").load(mywebapp/tab1);

1 个答案:

答案 0 :(得分:1)

使用__construct()

class MainController extends MY_Controller

protected $_id;

    public function __construct()
{
        $this->_id = $this->uri->segment(3);
}

    function main()
    {
        $this->load->model('main_model');
        $this->data['info'] = $this->main_model->foo($this->_id);
        $this->load->view('main_view', $this->data);
    }

    function tab1()
    {
        //available here too
        echo $this->_id;
        $this->load->view('tab1_view', $this->data);
    }
}

或者您可以将其更改为使用:$this->uri->uri_to_assoc(n),它们是/method/controller/key/value/key2/value2之后的关键值对

示例:

/user/search/name/joe/location/UK/gender/male

[array]
(
    'name' => 'joe'
    'location'  => 'UK'
    'gender'    => 'male'
)