【问题标题】:How to replace a service-decorator with a custom decorator in Symfony?如何在 Symfony 中用自定义装饰器替换服务装饰器?
【发布时间】:2019-10-06 10:57:30
【问题描述】:

在基于 Sylius 的 Symfony-4-Application 中,有一个服务装饰器位于其Core 深处:

   <service id="sylius.order_item_quantity_modifier.limiting" class="Sylius\Component\Core\Cart\Modifier\LimitingOrderItemQuantityModifier" decorates="sylius.order_item_quantity_modifier" decoration-priority="256">
        <argument type="service" id="sylius.order_item_quantity_modifier.limiting.inner" />
        <argument>9999</argument>
    </service>

但是,我想将这个装饰器替换为我在其服务定义中的don't want this limitation that is hard coded。

我该如何替换它?

我试图围绕这个服务装饰器定义一个服务装饰器,但由于某些原因它不适用:

app.core.cart.modifier:
    class: AppBundle\Component\Core\Cart\Modifier\MyLimitingOrderItemQuantityModifier
    decorates: sylius.order_item_quantity_modifier.limiting
    decoration_priority: 1000
    arguments:

我还尝试用我自己的类替换它的 service-id,但也没有用:

   sylius.order_item_quantity_modifier.limiting:
        class: AppBundle\Component\Core\Cart\Modifier\MyLimitingOrderItemQuantityModifier
        decorates: sylius.order_item_quantity_modifier.limiting
        decoration_priority: 100
        arguments:
            - "@app.core.cart.modifier.inner"

非常感谢任何帮助!

【问题讨论】:

  • 你可能想要装饰sylius.order_item_quantity_modifier,因为sylius.order_item_quantity_modifier.limiting 是已经装饰的服务,你再次装饰...。
  • thx @jak 但是原来的装饰器仍然被启用并修改了值
  • 你的服务的“名称”必须是sylius.order_item_quantity_modifier.limiting ...理论上。希望有效。

标签: symfony symfony4 sylius


【解决方案1】:

你可以有 2 或 3 个选项:

  1. 假设你有你的装饰器来装饰基础服务,其优先级高于sylius装饰器,这意味着:

    • 如果您使用 XXXXXXX.inner 注入服务,它将不是基础服务,而是优先级较低的装饰器:在您的情况下为 sylius 装饰器
    • 您可以决定不使用 XXXXXXX.inner 注入服务,并完全重写使用硬编码值的函数。它不利于可维护性,但它已经完成的方式也不是......
  2. 您可以使用Compiler Pass 来删除装饰器定义,或者如果您想使用其他值,甚至可以替换硬编码参数,或者可能是一个参数:-)
    更多信息can be found here

我刚刚在 sylius/sylius 存储库上看到了您的问题,第二种解决方案可能是最好的(当核心发生变化时很容易删除)!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-06
    • 2018-01-07
    • 2018-07-30
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2020-09-04
    相关资源
    最近更新 更多