Cake 2.x はデフォルトで、ステータスコード 4xx台のテンプレートに View/Error/error400.ctp
を使用します。
Refer: https://github.com/cakephp/cakephp/blob/2.x/lib/Cake/Error/ExceptionRenderer.php#L94-L132
この記事では、ステータスコード 4xx台のテンプレートを個別にする設定する方法を紹介します。
今回、1つの例として UnauthorizedException()
の例外が投げられた際に View/Error/error401.ctp
を使用するように変更します。
Let’s Start!
方針として
- Controller#appError($exception) でテンプレートを指定 https://github.com/cakephp/cakephp/blob/2.x/lib/Cake/Error/ExceptionRenderer.php#L98
- ExceptionRenderer.php を拡張
の 2通り思いついたのですが、
http://book.cakephp.org/2.0/en/development/exceptions.html#extending-and-implementing-your-own-exception-handlers
にあるように ExceptionRender
に使用するクラスを指定すことができるので、「2. ExceptionRenderer.php を拡張」を採用します。
MyCustomExceptionRenderer.php
ExceptionRenderに使用するクラスを指定
$ echo "Configure::write('Exception.renderer', 'MyCustomExceptionRenderer');" >> Config/bootstrap.php
テンプレート作成
$ touch View/Errors/error401.ctp
できました!
あとは、UnauthorizedException()
の例外を投げればおkです。
Todo
Reference Sites