0

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

移行ガイドによると、コントローラーで使用できる serviceLocator はもうありません。そして、すべてのコントローラーアクション内でそれを使用して、構成変数配列 (module.config.php にあります)、Doctrine MongoDB DocumentManager、およびDoctrine 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()をモデルに挿入する必要があるため、コントローラー内で呼び出す必要がありました。この問題を解決する方法を教えてください。これらの依存関係をモデル クラスに直接注入する可能性はありますか? モデルにファクトリを使用する必要がありますか?

もう 1 つの質問は、コントローラーに関するファクトリに関しては、アプリケーションのコントローラーごとに個別のファクトリを作成する必要があるかどうかです。アプリケーション内のいくつかのモジュール内に分散された非常に多くのコントローラーがあります。コントローラーごとに専用の工場を追加すると、その数は 2 倍になります。これを行う最善の方法を教えてください。

4

1 に答える 1

2

私が自分で読んだことから、コントローラーから getServiceLocator() を呼び出すことはできなくなりました。アンチパターンを促進するため、コントローラーは削除しました。

この問題に関する Matthew 自身のブログ投稿は次のとおりです: 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

于 2017-01-03T12:15:46.300 に答える