У меня есть контроллер в CodeIgniter, как это
class C extends CI_controller { public function A() { var $data; } public function B(){ //here i need to access the variable $data; } }
Как это сделать в CodeIgniter? Я могу использовать сеанс. Действительно ли полезно назначить эту переменную в сеансе? Есть ли лучший способ объявить глобальные переменные?
Я использовал это, но не работал
class C extends CI_controller { public $data; public function A() { $this->data=1; } public function B(){ //here $this->data showing null value y } }
Глобальные переменные существуют только в течение срока службы запроса. Поскольку для одного запроса в контроллере есть только одна функция (или вы делаете это неправильно!) Глобальные переменные не будут работать.
Вы должны поместить его в сеанс или в базу данных.
Используйте помощник сеанса CI :
class C extends CI_controller { public function A() { $this->load->library('session'); $data = array('data'=>$data); //set it $this->session->set_userdata($data); } public function B(){ $this->load->library('session'); $this->session->userdata('data'); //access it } }
Вы должны попытаться установить некоторые переменные в файле конфигурации, тогда вы просто включите этот файл в свой конструктор контроллеров, и вы сможете получить доступ к этим переменным из любого вида, который вы хотите … http://codeigniter.com/user_guide/libraries/config.html
Второй блок кода, который у вас есть, не будет работать, если у вас есть такой сценарий: Введите страницу C / A, затем введите C / B. После того, как страница будет выполнена, вы не сможете использовать значения, хранящиеся в глобальных переменных.
Попробуйте использовать сеансы или flashdata. Flashdata похожа на сеанс, за исключением того, что он исчезает после следующего вызова страницы.
Вот страница CI для сеансов и flashdata для справки: http://codeigniter.com/user_guide/libraries/sessions.html