如何表示使用带有 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%'
我想弄清楚是否可以在 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%'