Как сделать пользовательский объект доступным на страницах в CodeIgniter?
-
24-10-2019 - |
Вопрос
Я довольно новичок в Codeigniter и использую Ion Auth для авторизации пользователя. С библиотекой Ion Auth, вы получаете пользовательский объект, как:
$user = $this->ion_auth->get_user();
echo $user->email;
Если пользователь вошел в систему, я хочу, чтобы объект пользователя $ был доступен на любой из страниц (на любой из контроллеров). Как я могу это сделать? (Я использую codeigniter 2)
Решение
Этот мой пост в блоге Вдается много подробно в конкретно, используя Ion_auth, чтобы все ваше приложение (включая представления) для доступа к информации вашего текущего пользователя.
Короткая версия ... (специально для темы под рукой)
Добавление этого в ваш MY_Controller.php
файл
class User_Controller extends CI_Controller {
protected $the_user;
public function __construct() {
parent::__construct();
if($this->ion_auth->logged_in()) {
$data->the_user = $this->ion_auth->get_user();
$this->the_user = $data->the_user;
$this->load->vars($data);
}
else {
redirect('/');
}
}
}
Затем в вашем приложении просто создайте свой контроллер, как это
class App_Controller extends User_Controller {
public function __construct() {
parent::__construct();
}
function index() {
//do stuff
}
}
Тогда не только в вашем контроллере у вас будет доступ к $this->the_user
Но у вас также будет $the_user
загружен в каждый вид с $this->load->vars()
Другие советы
Обычно вы закричали что -то подобное на сессии, однако я отошел от этого в большинстве моих приложений CI.
Пример: вы регистрируете пользователя в (кэшируя пользовательские данные), а затем они переходят, чтобы обновить свою электронную почту на странице своего профиля. Теперь вам нужно перезагрузить кеш. Многие другие вещи могут стимулировать эту перезагрузку. Обычно больше всего я кэширую, - это идентификатор, а затем я делаю то, что вы делаете, и получаю данные пользователя на любой странице, которая мне нужна.
Одна вещь, которую я нашел, это помогает базовые контроллеры. Анкет Например, у меня есть зарегистрированный Любой контроллер, чьи действия требуют, чтобы пользователь был введен в систему, расширил это. Таким образом, я могу держать зарегистрированную проверку и такие вещи, как получить пользовательские данные в одном месте (в конструкторе). Например:
class RegisteredUserController extends CI_Controller {
var $user;
function __construct() {
parent::__construct();
$this->user = $this->ion_auth->get_user();
}
}
Тогда любой контроллер, который расширяется RegisteredUserController
вместо контроллера может добраться до пользователя с $this->user
. Анкет Следуя этой шаблоне получает его на каждой странице (которая расширяет контроллер), не прибегая к кэшированию.