Установка переменной для хранения электронной почты пользователя без повторения кода в каждой функции

Я использую библиотеку 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, что одинаково для каждой страницы. Как сделать его доступным для всех, не повторяя эту строку кода?

0

Решение

Добавить свойство класса $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 Посмотреть.

0

Другие решения

Решение было добавить эти две строки кода в моем Admin_controller:

$data['user_email'] = $this->ion_auth->user()->row()->email;
$this->load->vars($data);

При этом каждый метод представления в контроллерах расширяется Admin_controller может получить доступ к этой переменной.

0