2017-07-25 12 views
-2

私のすべてのモジュールコントローラを拡張する抽象コントローラが私のアプリケーション(ZF3)にあります。ZF3 AbstractContollerでgetServiceLocator() - > get( 'translator')をどうすればいいですか?

私はここで自分のベーストランスレータを呼び出し、モジュールごとにトランスレータを適用しますが、getServiceLocator()はZF3から削除されます。拡張コントローラーで$ this-> translatorを作成するために何ができるのでしょうか?

私はZF2に使用されるものをこの:

$this->translator = $this->getServiceLocator()->get('translator'); 

私はこれらのドキュメントを発見したが、これは私には、別の目的だと思われるが。

https://zendframework.github.io/zend-mvc/migration/to-v2-7/#servicelocatoraware-initializers

+0

実際には、リンクで行う必要があります。 "あなたのコードを準備する..."の後に読んでください。私が時間を見つけたら、私はあなたのケースに特定のコードで答えようとします。各コントローラ用のトランスレータをそれ自身の工場に注入する必要があるかもしれないことに注意してください。 –

+0

ありがとうございました!私は本当にそれを理解していると、あなたが言ったことを再度読んで、それをすべてデバッグして再デバッグします! – Matt

+0

私はコンテナやサンプル(ここでは完全には使用できません)の例として、ここでは苦労しています。そこにフォルダ名を置くだけです。工場を使用する場合でも、これは複数の方法で行うことができますか? – Matt

答えて

0

この問題を克服するためにさまざまな方法があります。

すべてのコントローラにサービスロケータを挿入することが、何よりも迅速に行われる最初のソリューションです。 これを行うには、コンストラクタを介して注入し、コントローラ(工場が多い場合は工場)を変更する必要があります。

これを行うと、コンテナ(サービスマネージャ)ではなくトランスレータのみを注入できます。

実際にイニシャライザを使用する方法はありますが、後で削除することもできます。私はおそらくむしろdelegatorを使用するでしょう。この方法では、コンストラクタを介して注入する必要はありませんが、セッタを介して注入する必要があります。つまり、時間的結合を導入することを意味します。

+0

ありがとう!最も適切な方法は、すべてのコントローラーにそれを注入するように思われるので、必要なところだけです。私はそれを初めて勉強しているので、実践的な事例を探しています。 ZF4でcontroller_pluginsが削除されるだけでなく、使用できないothertソリューションが見つかりましたが、彼のチュートリアルは完全です! https://daredevel.com/2017/04/to-setup-translate-controller-plugin-zend-framework-3/ – Matt

+0

あなたはチュートリアルで提案された方法で行くことができます、それは間違いなくZF3に有効です。 ZF4では、おそらくPSR7/PSR15アクションしかないので、間違いなくプラグインはありません。そのようにしたい場合は、ミドルウェアのルートを使用し、必要に応じてトランスレータを注入します。 –

+0

私は工場に行く必要があると確信しています。私は正しい方法を取っているかどうかを確かめるために適切な例が必要です。 – Matt

関連する問題