Я использую библиотеку Ion_Auth с Codeigniter 3.0. *. Мне удалось отобразить адрес электронной почты пользователя, с которым я вошел с этой строкой кода в __construct()
метод моего Admin_Controller
:
$this->user_email = $this->ion_auth->user()->row();
Но мне нужно повторить этот код:
$data['user_email'] = $this->user_email->email;
В каждом методе просмотра внутри каждого контроллера. Я отображаю переменную $user_email
в моем header.php
, что одинаково для каждой страницы. Как сделать его доступным для всех, не повторяя эту строку кода?
Добавить свойство класса $data
к определению класса Admin_controller.
Свойство $ data будет доступно каждому контроллеру, который расширяет Admin_controller. Поскольку это свойство класса, доступ к нему осуществляется с помощью синтаксиса. $this->data
,
class Admin_controller extends CI_Controller
{
//our new class property
protected $data = array();
public function __construct(){
parent :: __construct();
// do what is needed to get $ion_auth working
}
}
В любом классе расширяется Admin_controller
задавать $data['$user_email']
в конструкторе. Затем он становится доступным для каждого представления с данными $ this-> data
class Some_controller extends Admin_controller
{
public function __construct(){
parent :: __construct();
//I am assuming that by this time $this->ion_auth->user() exists
//so we add a key and value to the class' $data property
//Note the use of the "$this->" syntax)
$this->data['user_email'] = $this->ion_auth->user()->row();
}
public function sets_up_a_view(){
//do stuff until you're ready for the header
//note that we are sending the class property "$this->data" to the view
$this-load->view('header', $this->data);
//load other views as needed using $this-data or other array - your choice
}
public function some_other_view(){
//send class property to view
$this-load->view('header', $this->data);
$data['foo'] = 42;
//send local var to view
$this-load->view('other_parts', $data);
}
}
Обратите внимание, что оба sets_up_a_view()
а также some_other_view()
отправить свойство класса ‘$ this-> data’ header.php
, Но в some_other_view()
мы устанавливаем локальную переменную под названием $data
отправить на other_parts.php
Посмотреть.
Решение было добавить эти две строки кода в моем Admin_controller
:
$data['user_email'] = $this->ion_auth->user()->row()->email;
$this->load->vars($data);
При этом каждый метод представления в контроллерах расширяется Admin_controller
может получить доступ к этой переменной.