9

Symfony 2 (xml configs) で引数にサービス ID を動的に設定することは可能ですか (たとえば、パラメーターを介して設定できるクラス名のように)?

以下は動作しません

<service id="myservice" class="myservice.php">
    <argument type="service" id="%dynamic_service_name%" />
</service>

<service id="service1" class="foobar\service1" />
<service id="service2" class="foobar\service1" />

アイデアは、パラメーター %dynamic_service_name% を動的に「service1」または「service2」に設定することです。これにより、必要なインスタンス/オブジェクトが myservice-class に渡されます。たとえば、Extension::load() で $container->setParameter(' dynamic_service_name','service1');

どうもありがとう

4

5 に答える 5

1

symfony2 のドキュメントからそのまま ;)

<!-- app/config/config.xml -->
<parameters>
    <parameter key="my_mailer.class">Acme\HelloBundle\Mailer</parameter>
    <parameter key="my_mailer.transport">sendmail</parameter>
</parameters>

<services>
    <service id="my_mailer" class="%my_mailer.class%">
        <argument>%my_mailer.transport%</argument>
    </service>
</services>

これはあなたが求めているものですか?

http://symfony.com/doc/current/book/service_container.html#service-parameters

編集:

これは、パラメーターを使用した私のサービスの 1 つです。ただし、YAML です。これはうまくいきます。ご覧のとおり、パラメーターでクラスの名前空間と共にクラス名を使用しています。

parameters:
    seer_ukd_wright_gallery.gallery_helper.class: SeerUK\DWright\GalleryBundle\DependencyInjection\GalleryHelper

services:
    seer_ukd_wright_gallery.gallery_helper:
        class: %seer_ukd_wright_gallery.gallery_helper.class%
        arguments:
            em: "@doctrine.orm.entity_manager"
于 2013-03-25T12:29:27.627 に答える
0

これは、コンテナ自体をファクトリとして使用して実行できるおおよその方法です。次に、「dynamic_service_name」を service1 または service2 として定義すると、そのサービスに読み込まれます。(ファクトリの XML は 2.6 で若干異なりますが、同じように動作するはずです)

<service id="service1" class="foobar\service1" />
<service id="service2" class="foobar\service1" />

<service id="some.service" class="foobar\service1"
             factory-service="service_container"
             factory-method="get">
        <argument>%dynamic_service_name%</argument>
    </service>

<service id="myservice" class="myservice.php">
    <argument type="service" id="some.service" />
</service>
于 2015-04-01T13:46:02.753 に答える