環境など
- CakePHP3.6
- Docker or AWS
- php7.2
質問したい事象
何かしらエラーが発生した際に、だいたい以下のエラーメッセージが表示されます。
Error: [Error] Call to a member function user() on boolean
しかし、エラー該当箇所は別の場所にあります。
(つまり、エラーメッセージが役に立たない)
質問詳細
CakePHP3.6(PHP7.2)を利用しています。
CakePHPで何かしらエラーが発生した際、以下のエラーメッセージがよく表示されます。
Error: [Error] Call to a member function user() on boolean Stack Trace: #0 /var/www/html/src/Controller/ErrorController.php(55): App\Controller\AppController->beforeRender(Object(Cake\Event\Event)) #1 /var/www/html/vendor/cakephp/cakephp/src/Event/EventManager.php(353): App\Controller\ErrorController->beforeRender(Object(Cake\Event\Event)) #2 /var/www/html/vendor/cakephp/cakephp/src/Event/EventManager.php(330): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event)) #3 /var/www/html/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(114): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event)) #4 /var/www/html/vendor/cakephp/cakephp/src/Controller/Controller.php(777): Cake\Controller\Controller->dispatchEvent('Controller.befo...') #5 /var/www/html/vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(329): Cake\Controller\Controller->render('error500') #6 /var/www/html/vendor/cakephp/cakephp/src/Error/ExceptionRenderer.php(205): Cake\Error\ExceptionRenderer->_outputMessage('error500') #7 /var/www/html/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(118): Cake\Error\ExceptionRenderer->render() #8 /var/www/html/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(100): Cake\Error\Middleware\ErrorHandlerMiddleware->handleException(Object(Error), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response)) #9 /var/www/html/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner)) #10 /var/www/html/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response)) #11 /var/www/html/vendor/cakephp/cakephp/src/Http/Server.php(98): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response)) #12 /var/www/html/webroot/index.php(40): Cake\Http\Server->run() #13 {main}
しかしながら、エラーの内容はもっと別のところにあります。
例えばyum install
を実行するのを忘れていた等。。。
CakePHPは、AppControllerにAuth処理を入れたらエラーメッセージが固定されてしまうのでしょうか?
それとも私のやり方が間違っているのでしょうか。
後者の場合、修正方法をご教示いただきたいです……
また、beforeFilter
とbeforeRender
を公開可能な部分で以下に提示させていただきます。
public function beforeFilter(Event $event) { // コントローラー名を取得 $controllerName = $this->getRequest()->getParam('controller'); // そのコントローラー内でアクセス許可するアクションリストを取得 $allowAccessMethod = $this->_getAllowAccessMethod($controllerName); if ($allowAccessMethod) { // アクセス許可アクションリストを、登録 $this->Auth->allow($allowAccessMethod); } return parent::beforeFilter($event); }
※_getAllowAccessMethod
メソッドは別途定義してあり、配列が返ります。
public function beforeRender(Event $event) { // ユーザのログイン情報を取得 $user = $this->Auth->user(); // ビューに渡す $this->set('user', $user); }
申し訳ありませんが、よろしくお願いいたします。
追記
Authの認証について追記させていただきます。
今回、ユーザのログインなどには、CakePHPのAuthコンポーネントのIdentify
は使っていません。
理由として、認証を外部のSaaSに委託しているため、APIを叩いてユーザの有無、ユーザ情報の正誤をSaaS側で判断し、
SuccessかFailを返してもらっているからです。
こちらではユーザの情報をほぼ持っていないので、
ログインが成功した際は、$this->Auth->setUser($user);
というふうに、手動でデータをセッションに追加しています。
こちらも関係あるのでしょうか?
追記2
本文の「beforeRender」の処理の中の、
// ユーザのログイン情報を取得 $user = $this->Auth->user();
部分でAuthを使わない($user = '';
)状態にすると、正常にエラーメッセージが表示されるようになりました
回答2件
あなたの回答
tips
プレビュー