在 Sylius 中覆盖 PriceHelper
Overriding PriceHelper in Sylius
我试图通过添加 getOriginalPrice
函数来覆盖 PriceHelper
class,但由于服务未注册,在 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) }}
到
{{ money.calculateOriginalPrice(product|sylius_resolve_variant) }}
错误:
Unknown "sylius_calculate_original_price" filter. Did you mean
"sylius_calculate_price"?
有什么想法吗?
PriceHelper 服务在此文件中配置:https://github.com/Sylius/Sylius/blob/f7d42d2ce64288407372775e0ed421debcd50cd3/src/Sylius/Bundle/CoreBundle/Resources/config/services/templating.xml
但是,与其像您那样替换服务,不如装饰它。使用新 class 扩展 PriceHelper class 并添加您需要的功能,然后为您的新服务添加配置,如下面 link 所述,以装饰 PriceHelper 服务:http://symfony.com/doc/current/service_container/service_decoration.html
在您的特定情况下,您必须使用此配置:
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"
我试图通过添加 getOriginalPrice
函数来覆盖 PriceHelper
class,但由于服务未注册,在 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) }}
到
{{ money.calculateOriginalPrice(product|sylius_resolve_variant) }}
错误:
Unknown "sylius_calculate_original_price" filter. Did you mean
"sylius_calculate_price"?
有什么想法吗?
PriceHelper 服务在此文件中配置:https://github.com/Sylius/Sylius/blob/f7d42d2ce64288407372775e0ed421debcd50cd3/src/Sylius/Bundle/CoreBundle/Resources/config/services/templating.xml
但是,与其像您那样替换服务,不如装饰它。使用新 class 扩展 PriceHelper class 并添加您需要的功能,然后为您的新服务添加配置,如下面 link 所述,以装饰 PriceHelper 服务:http://symfony.com/doc/current/service_container/service_decoration.html
在您的特定情况下,您必须使用此配置:
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"