Как объявить переменную один раз в контроллере, и она применяется во всех методах контроллера
Я относительно новичок в структуре codeigniter и до сих пор хорошо адаптируюсь. Мне любопытно, есть ли короткий путь для достижения моего конечного результата. Ну, здесь проблема под рукой.
Я использую этот кусок кода $data['logged_in'] = $this->verify_min_level(1);
чтобы проверить, вошел ли пользователь в систему. Я пытаюсь избежать использования этого кода во всех других методах контроллера, но вместо этого объявляю его один раз, и он применяется глобально ко всем методам в контроллере.
Я пытался использовать protected $data['logged_in'] = $this->verify_min_level(1);
без удачи. Куда я иду не так и как мне это исправить? Заранее спасибо.
3 ответа
Я думаю, что вы должны реализовать это с помощью библиотеки.
Создайте библиотеку, которая знает, как выполнять авторизацию пользователя, используя сеансы и / или куки, базу данных, знает, чтобы проверить уровень пользователя.
Создайте файл "Auth.php" в каталоге "system\application\library".
class CI_Auth {
var $obj;
/**
* Constructor
*
* @access public
*/
function CI_Auth()
{
/* here you get application's instance
you can use it then as $this->obj->load->model('usermodel');
$this->obj->usermodel->login($name, $pass);
*/
$this->obj =& get_instance();
/* init code using sessions, cookies, database */
}
function getUserId() {
/* your code */
return $user_id;
}
function getAuthLevel() {
if ($this->getUserId()) {
/* Your code */
return $level;
}
return false;
}
}
Затем в system\application\config\autoload.php включите эту библиотеку:
$autoload['libraries'] = array('database', 'session', 'auth');
И теперь вы можете использовать его в любом контроллере, модели или представлении как:
if (!$this->auth->getUserId())
{
/* MUST LOG IN*/
}
if (!$this->auth->getAuthLevel() < 2)
{
/* NO PERMISSIONS */
}
Объявите переменную в классе и получите к ней доступ...
class Class_name extends CI_Controller
{
protected $logged_in;
public function __construct()
{
$this->logged_in = $this->verify_min_level(1); // assign the value to variable
}
public function another_method()
{
echo $this->logged_in; // access the defined variable
}
}
Сделайте вспомогательный файл в helpers
каталог. И определите функцию для проверки входа пользователя. подобно
if( ! function_exists('is_logged_in') ) {
function is_logged_in() {
$CI =& get_instance();
// Now you can load any module here with $CI
// Check user and return appropriate data
}
}
Теперь загрузите этот помощник, чтобы вам не приходилось загружать его каждый раз. config/autoload.php
и перемещаться $autoload['helper']
массив, теперь загрузите этот вспомогательный класс здесь.
Сделав все это, Ваш is_logged_in()
функция доступна для controller
, model
а также view
Вы можете подать заявку где угодно.