2012-08-13 60 views
6

在Zendframework 1中,我們使用init()方法初始化控制器中的東西。我看到這是從zenframework 2中取出的。爲什麼?什麼是在zf 2中實現相同的事情的最好方法是什麼?我正在升級我之前在zf1中開發的項目,我可以看到zf2與zf1相比已經發生了很多變化。zf2控制器中的init方法

zf2中是否還有其他變化?他們使用其他方法如z123中的preDispatch()postDispatch()

有人經歷過這個嗎?

回答

12

在zf2控制器中,ControllerLoader是ServiceManager的子類。如果您需要初始化控制器,請使用工廠或__construct。使用__construct來簡化初始化,如果控制器消耗了需要注入的其他對象,則使用Factory。

preDispatchpostDispatch也不再支持新的事件系統。要在zf2中獲得相同的結果,請註冊disptachrender事件的事件處理程序。對於MVC envents的完整列表,請參閱http://akrabat.com/zend-framework-2/a-list-of-zf2-events/

而且,在這裏看一看,因爲我認爲你可以拖放到一個控制器,該建立控制器工廠ZF2 how to get entity Manager from outside of controller

+4

除了akrabats事件的完整列表Matthew W.O'Phinney的博客http://mwop.net/blog/2012-07-30-the-new-init.html – Sam 2012-08-14 06:03:37

+0

感謝山姆,這個鏈接是非常有幫助。 – Developer 2012-08-14 07:31:41

8

的一個例子,它會工作。

public function onDispatch(MvcEvent $e) 
+0

這是我喜歡的答案。 – Ismael 2014-05-20 14:42:18

+0

耶穌謝謝,爲什麼ZF2中的一切都如此複雜 – Jonathan 2018-03-07 17:39:49

0

由於OP提到postDispatch,這是值得注意的是,__destruct現在工作以類似的方式。然而,一個很大的區別是執行不能被阻止(例如通過exit;)來終止對象的拆除。