在基于 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"
任何帮助,不胜感激!
答案 0 :(得分:1)
您可以选择2或3个选项:
假设您拥有您的装饰器,该装饰器装饰基本服务的优先级高于 sylius装饰器,这意味着:
您可以使用Compiler Pass来删除装饰器定义,或者甚至替换硬编码参数(如果要使用)另一个值或一个参数:-)
有关can be found here
我刚刚在sylius / sylius存储库上看到了您的问题,第二个解决方案可能是最好的(当核心发生变化时,很容易删除)!