Cakephp:如何将所有丢失的控制器/操作调用路由到单个一般错误页面?

时间:2009-11-17 01:03:35

标签: php cakephp

我有一个cakephp应用程序,每当Cake遇到任何错误(缺少控制器,操作等)时,我都会尝试提供Pages::404函数(以及相应的视图)。

最好的方法是什么?

4 个答案:

答案 0 :(得分:25)

Cake会自动为丢失的方法或控制器抛出404错误。在调试模式下,此错误采用包含指令的详细错误消息的形式,如:

  

缺少控制器

     

错误:找不到FooController。

     

错误:在文件中创建下面的类FooController:>应用程序/控制器/ foo_controller.php

     

注意:如果要自定义此错误消息,请创建app / views / errors / missing_controller.ctp

在生产模式(debug = 0)中,消息如下所示:

  

未找到

     

错误:在此服务器上找不到请求的地址'/ foo'。

这些错误页面在cake/libs/view/errors/中定义。正如调试模式中的消息所示,您可以在cake/中创建自己的自定义错误页面(使用与app/views/errors/目录中相同的名称)。

如果您想对错误执行自定义功能,最好将其放在AppError控制器中,如Error Handling中所述。

答案 1 :(得分:10)

步骤1:在app_controller.php中添加两个函数

function _setErrorLayout() {  
     if ($this->name == 'CakeError') {  
        $this->layout = 'error';  
     }    
}              

function beforeRender () {  
      $this->_setErrorLayout();
    }
}

第2步:在views\layouts\创建error.ctp 包含echo $ content_for_layout;

步骤:3 views\errors\ make missing_action.ctp并根据需要自定义页面 我的PHP代码是:

 echo $html->image('404-not-found-1-3.jpg');

答案 2 :(得分:0)

当您尝试重定向到404错误页面时,您是否在控制器中?

如果是这种情况,你可以解决这个问题:

从蛋糕中复制并粘贴错误布局(error404.ctp) 核心库目录到你的app / views / errors /

每当您在控制器中遇到错误时,请添加以下行。

$this->cakeError('error404',array(array('url'=>'/'))); 

哦,另一种处理方法是编辑app / config

中的routes.php文件

CakePHP Official site Routes-Configuration

目前我没有CakePHP的工作副本,所以我只想描述一下这里的基本逻辑(你可以在routes.php文件中做些什么)

将具有特定网址格式(例如http://yourwebsite/validController/validFunction/validParam)的流量分别重定向到相应的目的地。 将所有其他流量(缺少控制器,型号,视图等)重定向到404页面。

希望有所帮助:)

答案 3 :(得分:0)

请在app / controller文件夹中添加PostController.php类而不是post_controller.php。它只是意味着您必须像其类名一样创建。