CakePHP 2.0 – beforeFilter()无法在cakeErrorController上运行?

前端之家收集整理的这篇文章主要介绍了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()代替修复它.

猜你在找的PHP相关文章