Symfony 在Sylius中重写PriceHelper

Symfony 在Sylius中重写PriceHelper,symfony,sylius,Symfony,Sylius,我试图通过添加getOriginalPrice函数来覆盖PriceHelper类,但由于服务未注册,因此在service.yml上,我将: services: AppBundle\Helper\PriceHelper\: class: AppBundle\Helper\PriceHelper arguments: - "@sylius.calculator.product_variant_price" tags:

我试图通过添加
getOriginalPrice
函数来覆盖
PriceHelper
类,但由于服务未注册,因此在
service.yml
上,我将:

services:
    AppBundle\Helper\PriceHelper\:
        class: AppBundle\Helper\PriceHelper
        arguments:
            - "@sylius.calculator.product_variant_price"
        tags:
            - { name: templating.helper, event: sylius.templating.helper.price, method: getOriginalPrice, alias: sylius_calculate_original_price }
在细枝上,我补充道:

{%- macro calculateOriginalPrice(variant) -%}
  {% from _self import convertAndFormat %}
  {{- convertAndFormat(variant|sylius_calculate_original_price({'channel': sylius.channel})) }}
{%- endmacro -%}
并替换为:

{{ money.calculatePrice(product|sylius_resolve_variant) }}

错误:

Unknown "sylius_calculate_original_price" filter. Did you mean 
"sylius_calculate_price"?

有什么想法吗?

此文件中配置了PriceHelper服务:

但与其像你那样更换服务,不如装饰一下。使用新类扩展PriceHelper类并添加所需的功能,然后添加新服务的配置,如以下链接中所述,以装饰PriceHelper服务:

在您的特定情况下,您必须使用以下配置:

AppBundle\Helper\PriceHelper:
    decorates: '@sylius.templating.helper.price'
    arguments:
        $productVariantPriceCalculator: '@sylius.calculator.product_variant_price'
问题解决了。 实际上,services.yml很好。只需在config.yml中添加以下内容:

twig:
    globals:
        sylius_calculate_original_price: "@app.templating.helper.price"
在树枝上:

{{ sylius_calculate_original_price.getOriginalPrice(variant,{'channel': sylius.channel}) }}
services.yml可以缩短为:

app.templating.helper.price:
    decorates: sylius.templating.helper.price
    class: AppBundle\Helper\PriceHelper
    arguments:
        - "@sylius.calculator.product_variant_price"

我更新如下:
services:AppBundle\Helper\PriceHelper \:decorates:Sylius\Bundle\CoreBundle\Templating\Helper\PriceHelper类:AppBundle\Helper\PriceHelper参数:-“@Sylius.calculator.product\u variant\u price”标记:-{name:templating.helper,事件:sylius.templating.helper.price,方法:getOriginalPrice,别名:sylius\u calculate\u original\u price}
错误显示:
您请求了一个不存在的服务“sylius\Bundle\CoreBundle\templating\helper\PriceHelper”.
它在哪里抛出该错误?如果可能,请发布整个堆栈跟踪或错误消息上下文。当页面调用calculateOriginalPrice函数时会显示错误。完整日志:
(1/1)ServiceNotFoundException您请求了一个不存在的服务“Sylius\Bundle\CoreBundle\Templateing\Helper\PriceHelper”.ContainerBuilder.php第1043行中的ContainerBuilder->getDefinition('Sylius\\Bundle\\CoreBundle\\Templating\\Helper\\PriceHelper')中的decororServicePass.php第55行中的DecoratorServicePass->process(object(ContainerBuilder))中的Compiler.php第141行中的Compiler->(object(object(ContainerBuilder))在ContainerBuilder.php第778行的ContainerBuilder->compile()
中,如果我将decorates更改为:
decorates:sylius.templating.helper.price
并删除了参数,则会在下面抛出错误:
无法自动连接服务“AppBundle\helper\PriceHelper\”:方法的参数“$productVariantPriceCalculator”“Sylius\Bundle\CoreBundle\Templateing\Helper\PriceHelper::\uuuu构造()”引用接口“Sylius\Component\Core\Calculator\ProductVariantPriceCalculatorInterface”,但不存在此类服务。您可以将此接口别名为现有的“Sylius.Calculator.product\uVariant\uPrice”“服务。
尝试以下服务配置:
AppBundle\Helper\PriceHelper:decorates:sylius.templating.Helper.price参数:$productVariantPriceCalculator:'@sylius.calculator.product\u variant\u price'
app.templating.helper.price:
    decorates: sylius.templating.helper.price
    class: AppBundle\Helper\PriceHelper
    arguments:
        - "@sylius.calculator.product_variant_price"