我试图在我的控制器中抛出403(禁止错误)。抛出异常时,我想显示关联的视图。我假设如果错误是内置异常之一,这将非常容易。我抛出这样的异常:
throw new ForbiddenException("You do not have permission to view this page.");
我还创建了一个名为" error403.ctp"的视图。在app / view / Errors文件夹中(它已包含400和500)。问题是当抛出错误时,它会显示error400.ctp视图。我是否必须为内置错误创建自定义例外?我做错了什么。
答案 0 :(得分:1)
来自http://book.cakephp.org/2.0/en/development/exceptions.html#exception-renderer
"对于所有4xx和5xx错误,分别使用视图文件error400.ctp和error500.ctp。"
所以你没有做错任何事情,这只是默认的CakePHP行为。至于如何更改它以便您可以将403页面与其他4XX错误分开,请参阅CakePHP 2.0 - How to make custom error pages?
答案 1 :(得分:0)
我没有您使用的确切蛋糕版本,因此我将使用2.3版文档的链接,但它应该适用于任何版本2.x.
如果您查看default ExceptionRenderer construct,可以从说明中获得
创建控制器以对错误响应执行呈现。如果错误是CakeException,它将转换为400或500代码错误,具体取决于用于构造错误的代码。
并且很清楚,从the code of that function开始,所有错误都会映射到:
$method = 'error500';
if ($code >= 400 && $code < 500) {
$method = 'error400';
}
如果要使用其他视图,则必须创建自定义异常渲染器。另外,请记住,使用debug&lt; 1,你只会得到500个错误页面
捕获并处理所有未处理的异常。调试&gt;时显示有用的框架错误1.调试时&lt; 1 CakeException将呈现404或500个错误。如果抛出未捕获的异常并且它是ExceptionHandler不知道的类型,则将其视为500错误。