yaml 中的 symfony2 工厂服务

标签 symfony sylius

查看 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/

相关文章:

symfony - 在 Symfony2 中使用 assetic 加载一个 js 文件

docker - 错误: for nodejs unauthorized: access to the requested resource is not authorized

php - Symfony 翻译在生产环境中不起作用

Sylius: Composer 更新 sylius 0.17 后出错

symfony - Composer 更新后@template 注释的问题

symfony - Websocket 在订阅时断开连接

symfony - 教义 : Why can't I free memory when accessing entities through an association?

php - 从现有数据库生成实体

symfony - 使用 Doctrine 将实体与不同的子类合并

php - Sylius 通过 CartItemController 添加到购物车总计 0,00