Phalcon:控制器和模型中2个函数"initialize"和"onConstruct"的顺序

Vie*_*yen 4 controller model phalcon

我检查自己并看到,在Controller上执行的顺序是"onConstruct"然后"初始化",而在Model上是"初始化"然后是"onConstruct".

那么为什么这些方法的执行顺序在Controller和Model上有所不同?任何的想法?

kbt*_*tzr 12

除了相同的名称,initialize在模型和控制器中有不同的用途:

对于模型,初始化将主要负责初始化模型的metada(列映射,模型关系等),这就是它在构造函数之前调用的原因,因为所有模型元数据都静态存储在模型类中(顺便说一下,为什么initialize每个请求只调用一次)模型).

对于控制器 initialize如果路由匹配成功就被称为(所需动作的存在,并正确地要求)当前用户有权限根据执行该操作的ACL(如果有的话).所以首先构造控制器来检查那些东西(onConstruct被触发),然后如果一切顺利,你可以初始化你的控制器是真的(initialize被触发).


现在谈论onConstruct模型和控制器,这只是本机构造函数的替代品.不建议__construct在类中实现方法,因为它们将由需要特定方法签名的框架调用.此外,您还需要记住始终手动挂钩父构造函数.因此,通过使用该事件,我们避免了所有这些问题.onConstruct