在CodeIgniter 2.1.0中的Hook中使用会话数据

Ari*_*lam 3 php codeigniter codeigniter-2

我正在使用版本2.1.0的CodeIgniter.我想使用Hooks进行登录验证.这意味着我希望在每个控制器中检查会话数据是否已登录.所以我想使用钩子.我这样做的代码如下:

在配置文件中

$config['enable_hooks'] = TRUE;
Run Code Online (Sandbox Code Playgroud)

在档案中 hooks.php

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

在档案中 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');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它会引发以下错误:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: SessionData::$session

Filename: hooks/loginHelper.php

Line Number: 13
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

saf*_*rov 7

" 在系统执行期间很早就调用.此时只加载了基准测试和钩子类... "

您应该手动加载在Hook中使用的所有库和模型:

if (!isset($this->CI->session))
{
    $this->CI->load->library('session');
}
Run Code Online (Sandbox Code Playgroud)

并使用$this->CI->session->userdata()而不是$this->session->userdata().