2017-01-03 12 views
0

私のアプリケーションのzf2からzf3への移行に関するいくつかの問題があります。私は移行ガイドを読み、そこに記載されているように移行プロセスを開始しました。zf2からzf3への移行

マイグレーションガイドによると、もうコントローラに利用できるサービスの場所はありません。そして私はコントローラの各アクション内で、コンフィグ変数配列(module.config.phpにあります)、Doctrine MongoDB DocumentManagerDoctrine EntityManagerを必要なモデルに挿入するために使用しました。今、私は非常に多くの廃止予定の警告メッセージを以下のようにしています。

PHP非推奨: のZend \ ServiceManager \ ServiceManagerの使い方:: getServiceLocatorがV3.0.0以降 を廃止されました。私はにアクセスする必要があるので、ライン169

に/var/www/html/LeapX/vendor/zendframework/zend-servicemanager/src/ServiceManager.php に代わり、工場 に渡されたコンテナを使用してくださいconfig変数を使用し、Doctrine DocumentManagerDoctrine EntityManagerをモデルに挿入するには、コントローラ内で$this->getServiceLocator()と呼ぶ必要がありました。この問題を解決する方法を教えてください。これらの依存関係をモデルクラスに直接注入する可能性はありますか?モデルに工場を使用する必要がありますか?

もう1つの質問は、コントローラに関する工場のことです。アプリケーションのコントローラごとに個別の工場を作成する必要がありますか?アプリケーションには、モジュールの中にかなりの数のコントローラが広がっています。私が各コントローラの専用工場を追加すると、その数は倍になります。これを行う最善の方法を教えてください。

+0

この答えはここで見つけることができます:[ZF3でServiceManager](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()メソッドを使用する代わりに、クラスとコントローラの依存関係を明示的に定義することに個人的には同意しますが、コードによってはリファクタリングするコードがPITAのように見えます。

また、これはおそらく(私はこれを自分で試していないので、しかし、私は確かに言うことはできない)ことができます: http://circlical.com/blog/2016/3/9/preparing-for-zend-f

関連する問題