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"