CakePHP 2.0 – beforeFilter()无法在cakeErrorController上运行
我曾经使用Cake
PHP 1.3,但这是我第一次涉及CakePHP 2.0和PHP异常,所以如果我的问题看起来很罗嗦,请耐心等待.
在我的AppController的beforeFilter()中,我通过$this-> set()设置了几个变量,以便在我的视图模板中使用. 在我的UsersController中,我的代码看起来大致如下: public function beforeFilter() { parent::beforeFilter(); if (userDeniedAccess()) { throw new ForbiddenException(); } } 假设函数userDeniedAccess()封装了我的授权检查. 这一切都很好,我期待它时会收到403错误.但是,抛出异常时,不再设置在AppController :: beforeFilter()中设置的视图变量,从而导致视图模板出错.如果未抛出异常,则会正确设置变量. 如果必须,我可以编写缺失变量的代码,但我真的想知道导致这种行为的原因.我的UsersController和CakeErrorController都扩展了AppController.当然,我希望在抛出异常并实例化CakeErrorController时,它会为我生成相同的视图变量. 但是,看起来Controller :: startupProcess()方法(包括对beforeFilter()的调用)似乎永远不会在CakeErrorController上调用.据我所知,这是由调度员对常规请求完成的,但错误控制器的生命周期是不同的. 我在CakePHP 1.3中看到了类似行为的描述(like this one),但当然CakePHP的错误处理代码已经在2.0中彻底改变了. 所以要么: >这是CakePHP默认异常处理中的一个错误, 我知道你对案例3无能为力,但如果前两个中的任何一个适用,我会感谢那些比我更了解的人的意见. 谢谢! 编辑:在beforeRender()中设置视图变量确实解决了我的问题.但是,我仍然想知道在CakeErrorController上是否永远不会调用beforeFilter().
在beforeRender()回调中调用$this-> set().这样,即使你抛出异常,它们也会被设置.
我自己也遇到了一些自定义布局变量的问题,就像DebugKit一样,每当出现任何类型的错误时,我的页面都会填充未声明的变量警告.使用beforeRender()代替修复它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |