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 に答える