我一直想知道为什么我的错误页面导致了我网站的某些页面 不要渲染,但后来我意识到这是因为AppError扩展 ErrorHandler而不是AppController。这引起了一些变数 我在AppController的beforeFilter方法中设置不被发送到 风景。因为我无法从AppError访问会话变量,所以 以为我可以通过使用classRegistry来逃脱 实例化可以简单地复制和粘贴的东西 来自AppController的beforeFilter的其余代码......但是这不起作用,它看起来也不是一个非常优雅的修复。谁有任何关于什么的线索 这是解决这个问题的最好方法吗?谢谢,大卫。
答案 0 :(得分:6)
您的AppError类有一个控制器实例。您可以手动调用beforeFilter:
<?php
class AppError extends ErrorHandler {
function error404() {
$this->controller->beforeFilter();
parent::error404();
}
}
?>
答案 1 :(得分:1)
在CakePHP 2中,你可以做这样的事情来达到同样的效果。在app/Config/bootstrap.php
中,添加以下行:
Configure::write('Exception.renderer', 'AppExceptionRenderer');
然后使用以下代码创建文件app/Lib/Error/AppExceptionRenderer.php
:
App::uses('ExceptionRenderer', 'Error');
class AppExceptionRenderer extends ExceptionRenderer {
protected function _outputMessage($template) {
$this->controller->beforeFilter();
$this->controller->render($template);
$this->controller->afterFilter();
$this->controller->response->send();
}
}
修改:更新了指向2012年7月5日起正确定位CakePHP 2.0图书的链接。