0

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

4

2 回答 2

1

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

于 2013-05-16T20:44:58.377 回答
0

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

__construct($request = null, $response = null) {
    parent::__contruct($request, $response);
    $this->Session = $this->Components->load('Session');
    getRoles();
    ....
}
于 2013-04-29T14:12:56.943 回答