2012-04-23 14 views
2

Symfony2でサービスコンテナを作成すると、他のクラスなどのように静的な引数をコンストラクタに渡すことがほとんどです。Symony2コンテナコンストラクタに引数を渡すことは可能ですか?

しかし、私はファクトリを作成したいので、動的な引数をサービスコンストラクタに渡す必要があります。

私が見つけた例(例:http://symfony.com/doc/current/cookbook/service_container/factories.html)はすべて、引数として静的引数を使用しています。

しかし、工場で(たとえば)ユーザー入力に基づいて返すオブジェクトを決定するにはどうすればよいですか?

答えて

3

サービスファクトリがあなたのケースでは機能しない理由を理解するためにいくつか問題があります。お互い関係のない別のサービスクラスを返す必要がありますか?これがニーズに合わない場合は、今すぐ

class NewsletterFactory 
{ 
    public function __constructor(...) 
    { 
     // Receive arguments needed to create the service below 
    } 

    public function get() 
    { 
     // Say the variable $userInput exists and is derived from constructor 
     if ($userInput === 'string') 
      return new NewsletterManager($dynamicArgument1); 

     if ($userInput === 'integer') 
      return new AnotherNewsletterManager($dynamicArgument2); 

     return new DefaultNewsletterManager(); 
    } 
} 

:私は工場出荷時の例から何

は、あなたがこのような何かを行うことができることです。また、必要なものを返すサービスCustomFactoryを作成することもできます。返されるものは直接サービスではないので、何でもできます。しかしこれにより、CustomFactoryによって作成されたオブジェクトを依存関係コンテナから要求することができなくなります。

FormFactoryと同様です。フォームタイプをインスタンス化するために使用されるファクトリです。しかし、FormFactoryは依存性注入タグとコンパイラ・パスと結合されているので、より強力です。各タイプは依存性注入システムに登録され、それらを単独で取り出すことができます。私はちょうどFormコンポーネントのすべての内部を持っていませんが、他の方法では問題が解決できないと思います。

よろしくお願いいたします。
マット

関連する問題