

# 環境

  * 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**

[code]

    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>
    
[/code]

**Template/Error/error400.twig**

[code]

    Not Found
    
[/code]

**Template/Error/error500.twig**

[code]

    Server Error
    
[/code]

という具合です。

* * *

あまりにもできなかったため、以下のサイト様を参考にカスタムエクセプション処理を作成しました。  
<http://moblog.absgexp.net/cakeerr/#i-5>

しかし、 `Controller/AppErrorController.php` の `beforeRender` メソッドを徹の確認できるのですが、  
結局nginxのエラーページが表示されます。

また、何故かわかりませんが、 `deprecationWarning` 関数を呼び出し、画面にエラーメッセージを表示すると、うまく表示されます。  
が、それ本番では流石に使えないので困っております。

[code]

    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');
        }
    
[/code]

どなたかご存知の方がいらっしゃいましたら、ご教示いただけますと幸いです。  
よろしくお願いいたします。


CC BY-SA 4.0
2018-06-03T10:56:11.403
44497
2020-02-29T13:59:04.897
2020-02-29T13:59:04.897
32986
27593
question
cakephp twig
CakePHPでNotFoundExceptionをthrowした時のレンダリング処理について