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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何选择合适的 C++ Web 开发框架?
利用 C++ 框架构建高并发 Web 应用的策略
用 C++ 框架开发跨平台图形应用程序
golang框架中安全编码实践的最佳指南是什么?
golang框架与其他语言框架在设计理念上的区别有哪些?
C++ 图形框架与其他语言框架的比较
C++ 框架与其他 Web 开发框架的对比分析
使用 C++ 框架构建大型项目最佳实践
C++ 框架如何提高大型项目开发效率
C++ 框架中依赖注入的持续集成与部署工具
如何与社区协作和贡献到自定义 Golang 框架?
C++ 框架在大型项目中如何实现模块化开发
使用 C++ 框架开发跨平台 Web 应用
C++ 框架在大型项目中的优缺点
golang框架在性能上的优势体现在哪些方面?
C++ 框架在嵌入式系统内存优化中的优势
golang框架在人工智能与机器学习中的作用
如何扩展 Golang 框架以支持特定功能?
如何利用 Go Modules 和依赖项管理来自定义 Golang 框架?
Golang 框架中的性能优化技巧