Используйте данные сеанса в Hook в CodeIgniter 2.1.0 - PullRequest
3 голосов
/ 24 марта 2012

Я использую CodeIgniter с версией 2.1.0. Я хочу использовать хуки для авторизации при входе. Это означает, что я хочу, чтобы в каждом контроллере проверялись данные сеанса, вошли они или нет. Поэтому я хочу использовать крючки. Я делаю следующий код для этого:

В конфигурационном файле

$config['enable_hooks'] = TRUE;

В файле hooks.php

$hook['post_controller_constructor'][] = array(
                               'class'    => 'SessionData',
                               'function' => 'initializeData',
                               'filename' => 'loginHelper.php',
                               'filepath' => 'hooks',
                               'params'   => array()
                               );

В файле loginHelper.php

class SessionData{
    var $CI;

    function __construct(){
        $this->CI =& get_instance();
    }

    function initializeData() {

        // This function will run after the constructor for the controller is ran
        // Set any initial values here
        if (!$this->session->userdata('username')) { // This is line 13
            redirect('login');
        }
    }
}

Но выдает следующую ошибку:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: SessionData::$session

Filename: hooks/loginHelper.php

Line Number: 13

Как я могу решить эту проблему?

Ответы [ 6 ]

7 голосов
/ 24 марта 2012

" Вызывается очень рано во время выполнения системы. На данный момент загружен только класс тестов и хуков ... "

Вы должны вручную загрузить все библиотеки и модели, которые используетевнутри Крюк:

if (!isset($this->CI->session))
{
    $this->CI->load->library('session');
}

И используйте $this->CI->session->userdata() вместо $this->session->userdata().

1 голос
/ 24 марта 2012

Как уже упоминал safarov, в тот момент, когда ваша ловушка работает, библиотеки CodeIgniter не загружаются, а загружаются только библиотеки тестов и ловушек.В этот момент вы можете использовать любые функции CodeIgniter, которые загружаются во время работы контроллера.

Так что в вашем классе sessionData вы должны загрузить класс сеанса, используя суперобъект CodeIgniter.1006 * Приведенный выше код является вашим измененным кодом, и я поместил упомянутый вам код сафаров.

0 голосов
/ 15 января 2014
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MembersLoader
{
    function initialize() {
        $CI =& get_instance();

        // Load Session
        $CI->load->library('session');
        $member_id = $CI->session->userdata('userid');

        // Load Members Stuff
        $CI->load->library("members");
        $CI->members->set_members_data($member_id);
    }
}
  1. Вы должны использовать get_instance, чтобы получить доступ к библиотеке сеанса

  2. Сохранить идентификатор сеанса участника в $ member_id

  3. Загрузить библиотеку члена

  4. Используйте $ member_id в методе библиотеки элементов

0 голосов
/ 23 октября 2013
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class sessiondata extends CI_Controller{
    function initializeData(){
        **// imports libraries.**
        $this->load->library('session');
        $this->load->helper('url');
        $this->load->helper('form');
        if(!$this->session->userdata('email')):
            redirect('login');
        endif;
    }

}
0 голосов
/ 23 октября 2013

Решение расширяет пример CI_Controller:

class SessionData extens CI_Controller {
  $this->load->library('session');
  # Code ..
}
0 голосов
/ 24 марта 2012

Я предполагаю, что вы забыли загрузить библиотеку сессий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...