Cakephp beforeFilter vs构造函数

时间:2013-07-26 11:28:40

标签: php cakephp

我是cakephp的新手。我找到了一个很常用的方法

beforeFilter() 

我的问题是,它与类构造函数有何不同? 如果我打电话

怎么办?
parent::beforeFilter();

来自构造函数而不是beforeFilter(); 我只是想知道如果我在

中编写相同的代码
public function __construct() {
   // Code here
} 

而不是

public function beforeFilter() {
}

由于

3 个答案:

答案 0 :(得分:7)

construct()用于构造,加载你需要的东西。

  

__ construct()public   构造

     

参数:   ComponentCollection $ collection   此组件可用于延迟加载其组件的ComponentCollection

http://api.cakephp.org/2.3/class-Component.html#___construct


beforeFilter()执行在任何其他操作之前需要执行的函数

  

控制器:: beforeFilter()   此功能在控制器中的每个操作之前执行。这是检查活动会话或检查用户权限的便利位置。

http://api.cakephp.org/2.3/class-Controller.html#_beforeFilter

  

在控制器操作之前调用。您可以使用此方法配置和自定义组件,或执行每个控制器操作之前需要执行的逻辑。

     

注意:   将为缺少的操作和脚手架操作调用beforeFilter()方法。

http://book.cakephp.org/2.0/en/controllers.html#request-life-cycle-callbacks

通常你不需要一个构造函数,因为当遵循CakePHP约定时,只有很少的场景,你实际上没有其他选择,而不是“强制”手动加载...

答案 1 :(得分:5)

只需阅读Controller类中方法的说明:

  

在控制器操作之前调用。您可以使用此方法   配置和自定义组件或执行需要的逻辑   在每个控制器动作之前发生。

当访问URL并触发控制器的操作时,Dispatcher调用BeforeFilter:

  1. 构造
  2. BeforeFilter
  3. 动作
  4. BeforeRender
  5. 后过滤
  6. 我很少在构造函数中执行某些操作(至少我不记得了)。这也是一个很好的建筑设计。构造函数只是初始化东西,而beforeFilter允许你配置(例如主要是组件)之前初始化的内容。

答案 2 :(得分:0)

您可以在https://book.cakephp.org/1.2/en/The-Manual/Developing-with-CakePHP/Controllers.html#the-app-controller的官方CakePHP文档中找到一些相关的定义:

  

“回调:CakePHP控制器配有可用于在呈现控制器动作之前或之后插入逻辑的回调.forefilter():此功能在控制器中的每个动作之前执行。这是检查一个方便的地方活动会话或检查用户权限。“