Zend Framework 2中init()和onBootStrap()之间的区别?

时间:2014-03-19 16:34:51

标签: php zend-framework2

我正在读一本关于ZF2的书,它将init()和onBootStrap()作为Module.php中的函数引用,这些函数在每个页面加载期间调用,因此应该尽可能轻量级。

除了略有不同的签名:

init(ModuleManager m)
onBootStrap(MvcEvent e)

我很难确定何时应该使用哪种,以及出于什么原因。在本书中,两种方法都被用于附加(不同)事件。有人可以提供两者之间差异的明确定义,以及一些具体的例子,我会使用一个而不是另一个(以及为什么)?

谢谢!

1 个答案:

答案 0 :(得分:5)

你的问题的答案是时间和目的的问题。 init()函数始终出现在onBootstrap()函数之前。由于init()的目的是初始化模块(例如,使用其自己的独立配置选项),因此在为给定模块运行init()时可能尚未加载其他模块。但是,onBootstrap()在所有模块初始化后运行,并且可以侦听不同的事件。

可以在这里找到更详尽的解释 http://framework.zend.com/manual/2.3/en/modules/zend.module-manager.module-manager.html 以及文档中的下一页 http://framework.zend.com/manual/2.3/en/modules/zend.module-manager.module-class.html

就我个人而言,我使用init()http://4zend.com/integrate-propel-orm-with-zend-framework-2/中使用该技术创建名为Propel的模块中初始化Propel库。

我使用onBootstrap()检查我的访问控制列表(哪些用户可以访问哪些资源)并相应地限制访问,如下所示:

public function onBootstrap(\Zend\Mvc\MvcEvent $e) {
    // After the route event occurs, run the checkAcl method of this class
    $e->getApplication()->getEventManager()->attach('route', array($this, 'checkAcl'));
}