

Symfonyの2.7を使っています。  
Symfonyのコントローラからサービスコンテナに引数を渡したいのですができますか？

[code]

    $hoge = '任意の引数';
    // serviceの第二引数に$hogeを渡したい
    $service = $this->get('service');
    
[/code]

serviceのコンストラクタに任意の引数を渡したいです。

[code]

    service:
     arguments: クラス1
     arguments: 任意の引数
    
[/code]


CC BY-SA 3.0
2016-05-25T04:29:10.150
25151
2016-06-12T17:54:08.680
2016-05-25T04:58:41.943
8000
15608
question
php symfony2
Symfonyのサービスコンテナに引数を渡せますか？


うーん、ちょっとどういうユースケースなのかイマイチ理解出来てないので、間違った事言ってしまったらすいません。

おそらくコントローラから引数を渡したい場合というのは、コントローラが実行されたタイミングで初めて値が決定するのかと思います。

しかしservice.ymlからオブジェクトが生成されるタイミングは、コンテナがビルドされたタイミングで値が決まります。  
つまりコントローラ実行前に決まってしまうわけです。

なので、コントローラから値を渡したい場合は、サービス側にsetterを用意する必要があります。

[code]

    <?php
        class HogeService 
        {
            private $hoge;
          　public function setHoge($hoge)
            {
                $this->hoge = $hoge;
            }
        }
    
[/code]

しかしこの方法はあまりお勧めできません。

# 引数として実行するほうがまだいい

まだ実行するメソッドの引数として渡すのはありかと思います。

[code]

    $hoge = '任意の引数';
    // serviceの第二引数に$hogeを渡したい
    $service = $this->get('service');
    $service->execute($hoge);
    
[/code]

# 設計を見直してみる

Symfony2で何らかの制約によって実装が難しい場合に無理矢理に実装するのは非常に苦痛です。  
しかし、大抵の場合は設計が悪い事が多いです。

一度設計や要件を見直してみるのも良いかもしれません。


CC BY-SA 3.0
2016-06-12T17:54:08.680
26693
2016-06-12T17:54:08.680
5597
25151
answer