8

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

我一直在这里阅读以下问题:CakePHP 2.0 - 如何制作自定义错误页面?

但是有些东西不能按预期工作!

1.) 异常和错误似乎不是一回事,就好像我去一个虚假的 url 我得到了内置的 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');

但我最终得到的只是一个空白页......这是为什么呢?这只发生在手动异常时?

请问有人能回答这两个问题吗?谢谢

4

3 回答 3

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(); 线是踢球者。希望这对你有用!

于 2012-06-12T21:21:46.663 回答
0

这很简单,

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

这就是你需要做的一切

于 2012-12-26T04:27:26.210 回答
-1

简单地:

throw new NotFoundException;

请参阅有关“内置异常”的文档中的示例代码。

App::uses('ExceptionRenderer', 'Error');不应该是必需的。

对于单个视图编辑View/Errors/error400.ctp

于 2012-06-05T12:48:33.547 回答