如何表示使用带有 YAML 配置的工厂的参数,相当于此 XML 配置?

How to represent argument that uses factory with YAML configuration, equivalent to this XML configuration?

我想弄清楚是否可以在 YAML 语法中使用与 XML 语法中类似的结构来定义服务。特别是“构造”,在 XML 中,参数可以由工厂“在线”解析。

我有以下 XML 定义:

<service id="my_service_id" class="App\Some\Service">
    <argument type="service">
        <service class="Gaufrette\Filesystem">
            <argument>%some_container_parameter%</argument>
            <factory service="knp_gaufrette.filesystem_map" method="get" />
        </service>
    </argument>
    <argument type="service" id="request_stack"/>
    <argument>%some_other_container_parameter%</argument>
</service>

我不知道如何在 yaml 中表示这个(或者如果可能的话)。

我尝试了以下方法:

my_service_id:
    class: App\Some\Service
    arguments:
        - { class: Gaufrette\Filesystem, factory: ['@knp_gaufrette.filesystem_map','get'], arguments: ['%some_container_parameter%'] }
        - '@request_stack'
        - '%some_other_container_parameter%'

但这给了我以下错误信息:

Argument 1 passed to App\Some\Service::__construct() must implement interface Gaufrette\FilesystemInterface, array given

您在 XML 版本的同一定义中定义了两项服务。

虽然这在 XML 中是可能的,但我真的不认为这是个好主意。您可以通过自己定义每个服务来轻松地做到这一点:

gaufrette.filesystem:
    factory: ['@knp_gaufrette.filesystem_map','get']
    arguments: ['%some_container_parameter%']

my_service_id:
    class: App\Some\Service
    arguments:
        - '@gaufrette.filesystem'
        - '@request_stack'
        - '%some_other_container_parameter%'