eaj*_*eaj 8 cakephp exception-handling cakephp-2.0
我曾经使用CakePHP 1.3,但这是我第一次涉及CakePHP 2.0和PHP异常,所以如果我的问题看起来很罗嗦,请耐心等待.
在我AppController的beforeFilter()设置中,我设置了几个变量,$this->set()以便在我的视图模板中使用.
在我的UsersController代码中看起来大致如下:
public function beforeFilter() {
parent::beforeFilter();
if (userDeniedAccess()) {
throw new ForbiddenException();
}
}
Run Code Online (Sandbox Code Playgroud)
假设函数userDeniedAccess()封装了我的授权检查.
这一切都很好,我期待它时会收到403错误.但是,抛出异常时,AppController::beforeFilter()不再设置已设置的视图变量,从而导致视图模板出错.如果未抛出异常,则会正确设置变量.
如果必须的话,我可以编写缺失的变量,但我真的想知道导致这种行为的原因.我UsersController和他的CakeErrorController延伸AppController.当然,我希望当抛出异常并CakeErrorController实例化时,它会为我生成相同的视图变量.
但是,似乎永远不会Controller::startupProcess()调用该方法(包括调用beforeFilter())CakeErrorController.据我所知,这是由调度员对常规请求完成的,但错误控制器的生命周期是不同的.
我在CakePHP 1.3中看到了类似行为的描述(如此),但当然CakePHP的错误处理代码已经在2.0中彻底改变了.
所以要么:
我知道你对案例3无能为力,但如果前两个中的任何一个适用,我会感谢那些比我更了解的人的意见.
谢谢!
编辑:设置视图变量beforeRender()确实解决了我的问题.但是,我仍然想知道是否故意beforeFilter()永远不会被召唤CakeErrorController.
将调用放入回调$this->set()中beforeRender()。这样,即使您抛出异常,它们也将始终被设置。
我自己在使用一些自定义布局变量时也遇到了同样的问题,就像使用 DebugKit 一样,只要出现任何类型的错误,我的页面就会充满未声明的变量警告。使用beforeRender()而不是修复它。
| 归档时间: |
|
| 查看次数: |
2751 次 |
| 最近记录: |