Service ManagerでZend 3のドキュメントを読んでいましたが、この問題が発生しました。ドキュメントでZend3でサービスマネージャを使用する正しい方法
、それは我々のコントローラにいくつかのDIを持っている場合、我々はmodule.config.php
ファイルを更新し、コントローラキーを追加していないInvokableFactory::class
ではなく、カスタムファクトリクラスでコントローラを起動し、クラスの配列を含む別のキーservice_managerを追加する必要があることを述べている私の最初のコントローラが使用します。
[OK]を私はそれを行うよう:
class Controller1Factory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
return new Controller1(
$container->get(Controller2::class),
$container->get(Controller3::class),
);
}
}
Controller1Factory.php
がmodule.config.php
'service_manager' => [
'factories' => [
Controller\Controller2::class => Factory\Controller2Factory::class,
Controller\Controller3::class => Factory\Controller3Factory::class,
],
],
'controllers' => [
'factories' => [
Controller\Controller1::class => Factory\Controller1Factory::class
],
]
をしかし、今、私は、コントローラ2とコントローラ3はまた、その中でDIを持っているというエラーが発生しています私は自分のモデルに着くまで、新しいカスタム工場を作ります。
また、モデルにはコントローラに注入された依存関係があります。コントローラには、\Zend\Db\TableGateway\TableGatewayInterface
というZendネイティブがあり、今度はconfファイルを編集してTableGatewayInterface
を追加する必要があります。
それは間違っています。私は決してネイティブのzendクラスとサービスをこの方法で注入するべきではありません。
どうしたのですか?
問題の内容が不明です。あなたのモデルはコンストラクタに注入する必要がある他のクラスを必要としますが、サービスマネージャを使用してクラスをインジェクトする必要はありません。もしそうなら、どんな方法が好きですか? –
@TimFountainよく私のモデルは\ Zend \ Db \ TableGateway \ TableGatewayInterfaceインスタンスを必要とし、私はそれを私のモデルのコンストラクタに注入しています。しかし、これは、私はその特定のインターフェイスのサービスマネージャーに新しい価値を挿入することが良いとは分かりませんzendのインターフェイスです。 – madeye
コントローラーをコントローラーに挿入しないでください。モデルの依存関係を持つすべてのコントローラに対して別々のファクトリクラスを作成し、それぞれが必要とするモデルを注入します。 – dualmon