3

私は次のように定義されたパラメータを持っています:

parameters:
    config1:
        title: Title 1
        data_proc: getDataOne
        options: [things, stuff]
    config2:
        title: Title 2
        data_proc: getDataTwo
        options: [things, stuff]
#...

として定義されたサービス

my_service:
    class: Me\MyBundle\Services\MyService
    arguments:
        - @security.context
        - @doctrine.dbal.my_connection
        - %config% # the parameter that I'd like to be dynamic

のようなコントローラー

class ProduitController extends Controller
{
    public function list1Action()
    {
        $ssrs = $this->get('my_service'); // with config1 params
        # ...
    }
    public function list2Action()
    {
        $ssrs = $this->get('my_service'); // with config2 params
        # ...
    }
    #...
}

を使用するいくつかのコントローラーmy_service。パラメータのみを挿入して
呼び出すlist1Action()必要がありますmy_serviceconfig1

コントローラーと同じ数のサービスを定義せずに、どうすればそれを実行できますか?

4

2 に答える 2

2

引数は異なるがクラスは同じである 2 つのサービスを定義し、どちらか一方を取得します

于 2012-08-28T16:09:38.147 に答える
1

あなたのMe\MyBundle\Services\MyService中で、新しいパラメータを設定するパブリックメソッドを定義できます(setParameters($parameters)たとえば)。次に、コントローラーでこれを行うことができます:

class ProduitController extends Controller
{
    public function list1Action()
    {
        $config = $this->container->getParameter('config1');
        $ssrs = $this->get('my_service')->setParameters($config);
    }

    public function list2Action()
    {
        $config = $this->container->getParameter('config2');
        $ssrs = $this->get('my_service')->setParameters($config);
    }
}

これは最適なソリューションです。

もちろん、いくつかのコア クラスをオーバーライドして、数値部分をインクリメントした自動注入を実現することもできますが、それは本当に時間をかける価値があるのでしょうか?

于 2012-08-29T08:00:31.080 に答える