2017-01-03 56 views
0

我有一些與我的應用程序的zf2到zf3遷移有關的問題。我已經完成了遷移指南並開始了描述那裏的遷移過程。將zf2遷移到zf3

根據遷移指南,控制器中不再有serviceLocator。我曾經在每個控制器動作中使用它,將可變數組(位於module.config.php),Doctrine MongoDB DocumentManagerDoctrine EntityManager注入到需要它們的模型中。現在,我收到如此多的不推薦使用的警告消息;

PHP推薦使用:使用的 Zend的\的ServiceManager \的ServiceManager :: getServiceLocator被廢棄了,因爲V3.0.0 ;請用傳送到工廠,而不是在 /var/www/html/LeapX/vendor/zendframework/zend-servicemanager/src/ServiceManager.php 在容器上線169

因爲我需要訪問配置變量和注入Doctrine DocumentManagerDoctrine EntityManager到我的模型,我不得不在我的控制器中調用$this->getServiceLocator()。讓我知道如何解決這個問題。有沒有可能將這些依賴關係直接注入到我的Model類中?我是否需要爲模型使用工廠?

另一個問題是當涉及到控制器的工廠時,我是否需要爲我的應用程序的每個控制器創建單獨的工廠?有相當多的控制器數量在應用程序中的模塊內傳播。如果我爲每個控制器添加專用工廠,則會有兩倍的數量。讓我知道做到這一點的最佳方式。

+0

這個答案可以在這裏找到:[中的ServiceManager ZF3(HTTPS: //stackoverflow.com/questions/42168619/servicemanager-in-zf3) –

回答

2

從我自己讀過的東西,不再可能從控制器調用getServiceLocator(),他們刪除它,因爲它促進反模式。

下面是馬修自己博客中對這個問題: https://mwop.net/blog/2016-04-26-on-locators.html

從傢伙自己在這裏的另一種解釋(更短,可能會更容易消化): https://github.com/zendframework/zend-mvc/issues/89

我現在也是在試圖將ZF2(2.4.10)項目遷移到ZF3並面臨同樣問題的過程。

我個人同意使用getServiceLocator()方法顯式定義類和控制器的依賴關係,而不是使用getServiceLocator()方法,儘管取決於您的代碼,爲此目的重構大量代碼似乎是PITA。

或者,這或許可以幫助(雖然我不能肯定地說,因爲我沒有這個嘗試我自己): http://circlical.com/blog/2016/3/9/preparing-for-zend-f