我想为生产环境中出现的所有错误创建一个自定义 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 中复制相同的行为
不重定向
如果页面呈现 404,应采取的正确操作是渲染 404.
重定向到另一个页面会让用户感到困惑,特别是因为许多浏览器缓存 301 响应,导致原始 URL 无法访问。这也会影响例如搜索引擎作为静态文件404.html
将有一个 200 响应代码(除非你修改你的网络服务器配置),所以它会说 404 但根本不是。
博客教程 http://book.cakephp.org/3.0/en/tutorials-and-examples/blog/part-two.html所有开发人员在开始项目之前都应该这样做,它将引导您走向正确的方向:
public function view($id)
{
$article = $this->Articles->get($id);
$this->set(compact('article'));
}
表法get http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#getting-a-single-entity-by-primary-key返回单个实体对象或抛出异常:
如果 get 操作未找到任何结果,则会引发 Cake\Datasource\Exception\RecordNotFoundException。您可以自己捕获此异常,也可以允许 CakePHP 将其转换为 404 错误。
本示例中的控制器代码不需要任何“如果它不存在怎么办”处理,因为默认情况下如果记录不存在,则结果为 404。
更改 404 模板
如果您想更改 404 或 500 页面的外观更改模板文件 http://book.cakephp.org/3.0/en/development/errors.html#exception-renderer
对于所有 4xx 和 5xx 错误,分别使用模板文件 error400.ctp 和 error500.ctp。
错误模板是在你的申请中 https://github.com/cakephp/app/blob/master/src/Template/Error/error400.ctp,注意在生产模式下输出非常小 https://github.com/cakephp/app/blob/master/src/Template/Error/error400.ctp#L34-L41.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)