CakePHP 3.X中的自定义404页面

时间:2015-09-06 09:01:59

标签: cakephp

我想为生产环境中的所有网站错误创建一个自定义404页面。例如,如果我收到丢失的控制器或查看错误,那么它将重定向到 http://example.com/404.html,在某些情况下,我会故意重定向http://example.com/404.html

CakePHP 2.x早期通过在AppContoller.php中添加以下操作来完成

public function appError($error) {
    $this->redirect('/page-not-found.html',301,false);
} 

但它在CakePHP 3.x中不起作用,我想在CakePHP 3.x中复制相同的行为

3 个答案:

答案 0 :(得分:2)

不要重定向

如果页面应呈现404,则采取的正确操作是以呈现404

重定向到另一个页面会让用户感到困惑,特别是因为许多浏览器缓存301响应,使原始URL无法访问。这也影响例如搜索引擎作为静态文件404.html将有200个响应代码(除非您修改了您的网络服务器配置),因此它会说404但不是。

所有开发人员在开始一个项目之前应该做的

The blog tutorial指导您朝着正确的方向前进:

public function view($id)
{
    $article = $this->Articles->get($id);
    $this->set(compact('article'));
}

表方法get返回单个实体对象或抛出异常

  

如果get操作没有找到任何结果,将引发Cake \ Datasource \ Exception \ RecordNotFoundException。您可以自己捕获此异常,也可以允许CakePHP将其转换为404错误。

此示例中的控制器代码不需要具有任何"如果它不存在"处理因为默认如果记录不存在,结果是404.

更改404模板

如果您想更改404或500页面的显示方式change the template files

  

对于所有4xx和5xx错误,分别使用模板文件error400.ctp和error500.ctp。

错误模板为in your application,请注意在生产模式the output is very minimal

答案 1 :(得分:0)

如果get操作未找到任何结果,则会引发Cake\Datasource\Exception\RecordNotFoundException。您可以自己捕获此异常,也可以允许CakePHP将其转换为404错误。

答案 2 :(得分:0)

最简单的方法可以分两步实施,

第1步:

在config / app.php中关闭调试模式

第2步:

src/Template/Layout/error.ctp的内容替换为您的自定义布局。