【问题标题】:Adding a custom function to twig in OROcrm在 OROcrm 中向 twig 添加自定义函数
【发布时间】:2019-02-22 08:11:44
【问题描述】:

我创建了一个扩展,其中包含我的自定义函数。

类 AppExtension 扩展 \Twig_Extension { 私人 $_container; 公共函数 __construct($container) { $this->_container = $container; } 公共函数 getFunctions() { 返回 [ 新 \Twig_SimpleFunction('autologin', [$this, 'autologin'], ['is_safe' => ['all']]) ]; } 公共功能自动登录($customer,$url) { 返回 sprintf(''); } 公共函数 getName() { 返回'xxx_app_extension'; } }

我已将其添加到 services.yml:

    xxx_opportunity.twig.helper:
    class: 'OpportunityBundle\Twig\AppExtension'
    public: false
    arguments:
        - '@service_container'
    tags:
        - { name: twig.extension }

当我通过执行“php bin/console debug:twig”查看 ORO 是否找到它时,我可以看到我的自定义函数出现在列表中。当我尝试使用 OROcrm 中的电子邮件模板编辑器在电子邮件模板中实现它时,我收到以下错误:

The template for xxxx has syntax error: Unknown "autologin" function at line 18.

这件事困扰我太久了,有人有解决方案吗?


更新:

$instance = new \Oro\Bundle\EmailBundle\Provider\EmailRenderer(${($_ = isset($this->services['oro_email $instance->addExtension(${($_ = isset($this->services['oro_ui.twig.html_tag']) ? $this->services['oro_u $instance->addExtension(${($_ = isset($this->services['oro_config.twig.config_extension']) ? $this->ser $instance->addExtension(${($_ = isset($this->services['oro_ui.twig.extension.formatter']) ? $this->serv $instance->addExtension(${($_ = isset($this->services['oro_locale.twig.address']) ? $this->services['or $instance->addExtension(${($_ = isset($this->services['oro_locale.twig.date_time']) ? $this->services[' $instance->addExtension(${($_ = isset($this->services['oro_entity.twig.extension.entity']) ? $this->ser $instance->addExtension(${($_ = isset($this->services['twig.extension.intl']) ? $this->services['twig.e $instance->addExtension(${($_ = isset($this->services['oro_locale.twig.date_time_organization']) ? $thi $instance->addExtension(${($_ = isset($this->services['oro_calendar.twig.dateformat']) ? $this->service $instance->addExtension(${($_ = isset($this->services['oro_calendar.twig.recurrence']) ? $this->service $instance->addExtension(${($_ = isset($this->services['oro_currency.twig.currency']) ? $this->services[ $instance->addExtension(${($_ = isset($this->services['twig.extension.routing']) ? $this->services['twi

这是编译器最终得到的 getOroEmail_EmailRendererService.php,如您所见,它缺少我的扩展。我该如何解决这个问题?

【问题讨论】:

  • 命名空间OpportunityBundle\Twig是否也存在于类AppExtension中?
  • 是的,这个类本身没有问题。
  • 您的示例代码对我来说一切正常
  • JFYI 电子邮件模板无法访问所有 twig 函数和过滤器,只能缩小集合
  • @SerhiiPolishchuk 怎么样? symfony 肯定会注入他的自定义扩展类吗?

标签: php symfony twig orocrm


【解决方案1】:

用于渲染文件的 Twig 和用于渲染电子邮件模板的 Twig 不是同一个实例。 ORO CRM 扩展了用于呈现电子邮件模板的 Twig 功能,请查看 Oro\Bundle\EmailBundle\Provider\EmailRendered。我找不到任何与这件事相关的标签,因此您可能需要 CompilerPass 来为 EmailRenderer 添加扩展。

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 2012-10-27
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多