Доступ к значению публичной переменной в контроллере codeigniter - PullRequest
8 голосов
/ 16 июня 2011

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

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);
}

}

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

Ответы [ 2 ]

11 голосов
/ 17 июня 2011

Вы должны использовать конструктор вместо 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);
}
        }
2 голосов
/ 16 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...