CakePHP 2.1中的错误的自定义视图

时间:2012-06-02 16:23:41

标签: php cakephp

我正在寻找为CakePHP 2.1中的错误创建自定义视图

我在这里一直在阅读以下问题:CakePHP 2.0 - How to make custom error pages?

但是有些事情没有按预期发挥作用!

1。)例外和错误似乎不是一回事,好像我去了一个伪造的网址我得到了内置的404页面,但如果我在控制器中手动执行一个未发现的异常,它将调用自定义视图... 为什么是这样?我认为Cake中的所有错误都经历了异常?

2。)我正在尝试渲染视图而不是实际重定向用户... 例如:

App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    public function notFound($error) {
        $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
    }
}

而不是我正在尝试的重定向:

$this->controller->layout = null;
$this->controller->render('/Errors/error404');

但我最终得到的只是一个空白页......为什么会这样?这只在进行手动例外时才会发生?

有人可以回答这两个问题吗?感谢

3 个答案:

答案 0 :(得分:9)

我终于成功了解了这个问题!查看github中的代码,我设法让它运行起来。这是我的AppExceptionRenderer.php:

App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {
    public function missingController($error) {
        $this->controller->render('/Errors/error404', 'layout');
        $this->controller->response->send();
    }

    public function missingAction($error) {
        $this->missingController($error);
    }
}

如果你想调用你的控制器回调,你必须在beforeFilter()之前做这样的事情:

$this->controller->beforeFilter();

那$ this-> controller-> response-> send();线是踢球者。希望这适合你!

答案 1 :(得分:0)

这很简单,

public function notFound($error) {
    $this->_outputMessage('error404');
}

这就是你需要做的所有事情

答案 2 :(得分:-1)

简单地:

throw new NotFoundException;

请参阅有关“内置异常”的文档中的example code

App::uses('ExceptionRenderer', 'Error');不应该被要求。

对于单个视图,请修改View/Errors/error400.ctp