无法在AppController构造函数中获取会话组件

时间:2013-04-28 08:56:23

标签: cakephp cakephp-2.3

我需要从数据库中获取用户的角色 我想在一切之前做一次。所以我从AppController构造函数调用一个函数,它使用会话组件。功能如下:

public function getRoles() {
    if ($this->Session->check('user_name')) {
        $username = $this->Session->read('user_name');
        $userdesc = $this->Session->read('user_desc');
        if ($userdesc === 'Student') {
            $this->roles['Student'] = true;
        } elseif ($userdesc === 'Faculty') {
            $this->roles['Teacher'] = true;

            $this->loadModel('UserRole');
            $userRolesList = $this->UserRole->getUserRolesList($username);

            $this->loadModel('Role');
            $rolesList = $this->Role->getRolesList();

            foreach($userRolesList as $userRole)
            {
                $this->roles[$rolesList[$userRole['UserRole']['role_id']]] = true;
            }
        }
    }
}

我使用数组加载会话组件。但是我不能使用$this->Session。如果我动态加载组件,该函数会给出其他错误。 但是,如果我从beforeFilter()调用此函数,它就没有问题。为什么我不能在构造函数中做到这一点?

2 个答案:

答案 0 :(得分:1)

你不能使用$ this这个内部构造函数,因为$ this尚未实现。 这里解释PHP: using $this in constructor

答案 1 :(得分:0)

也许这只是一个疯狂的猜测但是...如果你覆盖它的构造函数,我不希望AppController工作。 我不确定为什么你不能使用在beforeFilter()中调用的函数,但如果你坚持我会尝试在你的AppController中执行以下操作:

__construct($request = null, $response = null) {
    parent::__contruct($request, $response);
    $this->Session = $this->Components->load('Session');
    getRoles();
    ....
}