У меня есть эта приватная сессия в одном из моих контроллеров, который проверяет, вошел ли пользователь в систему:
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; } }