Cakephp Can';无法在AppController构造函数中获取会话组件

Cakephp Can';无法在AppController构造函数中获取会话组件,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我需要从数据库中获取用户的角色。 我想在一切发生之前做一次。所以我从AppController构造函数调用一个函数,它使用会话组件。函数如下所示 public function getRoles() { if ($this->Session->check('user_name')) { $username = $this->Session->read('user_name'); $userdesc = $this->Sessi

我需要从数据库中获取用户的角色。
我想在一切发生之前做一次。所以我从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()调用这个函数,它不会产生任何问题。为什么我不能在构造函数中执行它?

也许这只是一个猜测,但是。。。如果重写AppController的构造函数,我就不希望它工作。 我不知道为什么在beforeFilter()中调用函数对您不起作用,但如果您坚持,我将尝试在您的AppController中执行以下操作:

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

您不能在构造函数中使用$this,因为$this尚未实例化。 在这里解释