Доступ к значению общедоступной переменной в контроллере codeigniter

Кто-нибудь знает, как получить доступ к значению переменной общедоступного контроллера, которое было обновлено другой функцией? пример кода Контроллер

class MyController extends CI_Controller {

public $variable = array();

function  __construct() {
    parent::__construct();
}

function index(){
    $this->variable['name'] = "Sam";
    $this->variable['age'] = 19;
}

function another_function(){
    print_r($this->variable);
}

}

когда я вызываю other_function(), я получаю пустой массив. В чем может быть проблема? Любая помощь будет оценена.


person Sam Samson    schedule 16.06.2011    source источник
comment
Глупый вопрос, вы вызывали index()?   -  person Wesley van Opdorp    schedule 16.06.2011
comment
Это должно сработать, похоже, index() не вызывался.   -  person Dunhamzzz    schedule 16.06.2011


Ответы (2)


вам нужно использовать конструктор вместо index().

    class MyController extends CI_Controller {

    public $variable = array();

    function  __construct() {
        parent::__construct();
        $this->variable['name'] = "Sam";
        $this->variable['age'] = 19;
    }

    function index(){

    }

    function another_function(){
        print_r($this->variable);
    }
    }

Если вы хотите вызвать index(), то вызовите another_function(), попробуйте использовать класс CI session.

    class MyController extends CI_Controller {

public $variable = array();

function  __construct() {
    parent::__construct();
    $this->load->library('session');
    if ($this->session->userdata('variable')) {
        $this->variable = $this->session->userdata('variable');
    }
}

function index(){

    $this->variable['name'] = "Sam";
    $this->variable['age'] = 19;
    $this->session->set_userdata('variable', $this->variable);
}

function another_function(){
    print_r($this->variable);
}
        }
person tpae    schedule 16.06.2011
comment
Старый, но золотой для меня. спасибо - person Naren Verma; 26.09.2017

Функция index() вызывается только тогда, когда вы переходите на эту конкретную страницу, то есть index.php/mycontroller/index, поэтому переход на index.php/mycontroller/another_function не вызовет функцию index(). Если вам нужно, чтобы пользователь сначала перешел на индексную страницу (чтобы получить свои данные), сначала направьте их туда и сохраните данные в базе данных или в переменной сеанса. Если вы заранее знаете значения (т. е. это всегда будут «Сэм» и «19»), поместите этот код в конструктор, который вызывается каждый раз, когда вы посещаете страницу с этого контроллера.

person jackbot    schedule 16.06.2011