2014-03-19 72 views
3

我正在閱讀ZF2上的一本書,它將init()和onBootStrap()作爲Module.php中的函數引用,並在每次頁面加載時調用,因此應儘可能輕量級。Zend Framework 2中init()和onBootStrap()之間的區別?

除了一個稍微不同的簽名:

init(ModuleManager m) 
onBootStrap(MvcEvent e) 

我掙扎,以確定何時應該使用哪些,以及是什麼原因。在這本書中,兩種方法都被用於附加(不同)事件。有人可以提供兩者之間差異的明確定義,以及一些具體的例子,我將使用一個而不是另一個(以及爲什麼)?

謝謝!

+0

onBootStrap(MvcEvent E)一般爲監聽事件和init(ModuleManager會米)爲模塊。雖然您可以將事件添加到ModuleManager,但使用onBootStrap(MvcEvent e)可能會更好。 – cptnk

回答

4

您的問題的答案是時間和目的。 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()一個模塊在初始化的Propel庫我創造性地命名Propel使用http://4zend.com/integrate-propel-orm-with-zend-framework-2/的技術。

我用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')); 
} 
+0

乾杯,我結束了一個非常類似的結論。在我意識到從init()中設置的特定事件偵聽器實際發生在onBootstrap()被調用之前,我努力去理解爲什麼事件偵聽器從兩個函數中被附加。 – Neobyte

相關問題