查看 Symfony 的 Sylius Bundle 的代码,我注意到 Resource Bundle 有一种有趣的方式将资源 Controller 定义为服务。 以下是 XML 格式的购物车项目 Controller 服务配置
<service id="sylius.controller.cart_item" class="%sylius.controller.cart_item.class%">
<argument type="service">
<service factory-service="sylius.controller.configuration_factory" factory-method="createConfiguration" class="Sylius\Bundle\ResourceBundle\Controller\Configuration">
<argument>sylius</argument>
<argument>cart_item</argument>
<argument>SyliusCartBundle:CartItem</argument>
</service>
</argument>
<call method="setContainer">
<argument type="service" id="service_container" />
</call>
</service>
如果我理解正确的话,这段代码会实例化 Controller 类,并将调用工厂服务类中的工厂方法“createConfiguration”的结果作为构造函数参数传递。参数已指定,因此一切都很好。
我的问题有两个: 1)这在哪里记录?我在文档中找不到这种作为工厂可调用参数的示例。 2)这个的 YAML 版本是什么?
谢谢...
最佳答案
方法如下:
<service id="sylius.controller.cart_item" class="%sylius.controller.cart_item.class%">
<argument type="service">
<service factory-service="sylius.controller.configuration_factory" factory-method="createConfiguration" class="Sylius\Bundle\ResourceBundle\Controller\Configuration">
<argument>sylius</argument>
<argument>cart_item</argument>
<argument>SyliusCartBundle:CartItem</argument>
</service>
</argument>
<call method="setContainer">
<argument type="service" id="service_container" />
</call>
</service>
在yml中可以写成如下
sylius.controller.cart_item:
class: %sylius.controller.cart_item.class%
arguments:
- "@=service('sylius.controller.configuration_factory').createConfiguration('sylius', 'cart_item', 'SyliusCartBundle:CartItem')"
calls:
- [setContainer, ["@service_container"]]
关于yaml 中的 symfony2 工厂服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884057/