Передача переменной из одного метода контроллера в другой

Я использую платформу CodeIgniter. Я загружаю основной вид, который содержит несколько вкладок, которые загружают другие виды в <div> через AJAX. Мой класс контроллера выглядит так:

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 ответ

Решение

Использование __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'
)
Другие вопросы по тегам