我需要从数据库中获取用户的角色 我想在一切之前做一次。所以我从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()调用此函数,它就没有问题。为什么我不能在构造函数中做到这一点?
答案 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();
....
}