CakePHPでNotFoundExceptionをthrowした時のレンダリング処理について
環境
- cakephp3.6
- php7.2
- nginx
質問
CakePHP3.6を利用しております。
もともとLaravelを使っていたので、テンプレートエンジンが欲しく、
以下のTwigプラグインを使っています。
https://github.com/WyriHaximus/TwigView
しかし、いざエラーページを作成しようと、
- Template/Layout/default.twig
- Template/Error/error400.twig
- Template/Error/error500.twig
を作ったのですが、 throw new NotFoundException();
しても、nginxのエラーページが表示されてしまいます。
これが何故かわかりません。
ファイルの中身としては、
Template/Layout/default.twig
OCTYPE html>
<html>
<head>
{{ Html.charset() | raw }}
<title>
エラーページ
</title>
</head>
<body>
<div id="container">
<div id="header">
<h1>{{ __('Error') }}</h1>
</div>
<div id="content">
{{ _view.fetch('content')|raw }}
</div>
<div id="footer">
</div>
</div>
</body>
</html>
Template/Error/error400.twig
Not Found
Template/Error/error500.twig
Server Error
という具合です。
あまりにもできなかったため、以下のサイト様を参考にカスタムエクセプション処理を作成しました。
http://moblog.absgexp.net/cakeerr/#i-5
しかし、 Controller/AppErrorController.php
の beforeRender
メソッドを徹の確認できるのですが、
結局nginxのエラーページが表示されます。
また、何故かわかりませんが、 deprecationWarning
関数を呼び出し、画面にエラーメッセージを表示すると、うまく表示されます。
が、それ本番では流石に使えないので困っております。
public function beforeRender(Event $event)
{
//「src/Template/Layout/」の下にあるLayoutファイルを参照している
$this->viewBuilder()->setLayout('error');
//Templateファイルのあるパスを指定(src/Template/Error/)
$this->viewBuilder()->setTemplatePath('Error');
//$this->viewBuilder()->templatePath('Error');
}
どなたかご存知の方がいらっしゃいましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。