Как объявить переменную один раз в контроллере, и она применяется во всех методах контроллера

Я относительно новичок в структуре 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 Вы можете подать заявку где угодно.

Другие вопросы по тегам