У меня есть эта приватная сессия в одном из моих контроллеров, который проверяет, вошел ли пользователь в систему:
function _is_logged_in() { $user = $this->session->userdata('user_data'); if (!isset($user)) { return false; } else { return true; } }
Проблема в том, что у меня несколько контроллеров. Как я могу использовать эту функцию в этих других контроллерах? Переопределение функции в каждом контроллере не очень «СУХОЙ».
Есть идеи?
Другой вариант – создать базовый контроллер. Поместите функцию в базовый контроллер и затем наследуйте ее.
Чтобы добиться этого в CodeIgniter, создайте файл с именем MY_Controller.php в папке с библиотеками вашего приложения.
class MY_Controller extends Controller { public function __construct() { parent::__construct(); } public function is_logged_in() { $user = $this->session->userdata('user_data'); return isset($user); } }
Затем сделайте свой контроллер наследуемым от этого базового контроллера.
class X extends MY_Controller { public function __construct() { parent::__construct(); } public function do_something() { if ($this->is_logged_in()) { // User is logged in. Do something. } } }
Поместите его в помощник и выполните автозагрузку.
хелперы / login_helper.php:
function is_logged_in() { // Get current CodeIgniter instance $CI =& get_instance(); // We need to use $CI->session instead of $this->session $user = $CI->session->userdata('user_data'); if (!isset($user)) { return false; } else { return true; } }
конфиг / autoload.php:
$autoload['helper'] = array('login');
Затем в контроллере вы можете позвонить:
is_logged_in();
Вы можете достичь этого, используя вспомогательный и конструктор CodeIgniter.
Вы можете создать собственный помощник my_helper.php, в котором написана ваша функция
function is_logged_in() { $user = $this->session->userdata('user_data'); if (!isset($user)) { return false; } else { return true; } }
В контроллере, если его login.php
class Login extends CI_Controller { public function __construct() { parent::__construct(); if(!is_logged_in()) // if you add in constructor no need write each function in above controller. { //redirect you login view } }
Получите все данные пользователя из сеанса.
В контроллере ,
$userData = $this->session->all_userdata();
В представлении ,
print_r($userData);
Я думаю, что использование крючков довольно просто. Просто создайте крючок, чтобы проверить $this->session->user
. Он будет вызываться в каждом запросе.
Просто добавьте это в свой основной файл ci_controller папки в функции __construct (), чтобы проверить весь контроллер ():
function __construct() { parent::__construct(); if(! $user = $this->session->userdata('user_data');) { return false; } }