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()代替修复它.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...