【问题标题】:Symfony2 Multiple Twig ExtensionsSymfony2 多个 Twig 扩展
【发布时间】:2013-01-15 01:00:03
【问题描述】:

是否可以创建多个 Twig 扩展?因为当我添加第二个时,我收到第一个扩展方法在第二个扩展中不存在的错误消息。

这是我的扩展在 services.xml 中的定义方式:

<service id="acme.extension.view_helper" class="FLS\AcmeBundle\Extension\ViewHelperExtension">
        <argument type="service" id="doctrine.orm.entity_manager" />
        <tag name="twig.extension" />
 </service>

<service id="acme.extension.stats_helper" class="FLS\AcmeBundle\Extension\StatsExtension">
        <argument type="service" id="doctrine.orm.entity_manager" />
        <tag name="twig.extension" />
</service>

这是错误信息:

致命错误:调用未定义的方法 FLS\AcmeBundle\Extension\StatsExtension::findTask() 在 F:\www\AcmeBundle\app\cache\dev\twig\fe\fd\4ff31bf8efd0669b6d0b2a14ba11.php 在第 232 行

findTask 方法在 ViewHelperExtension 中定义。

提前致谢!

【问题讨论】:

  • 能否分享您的 ViewHelperExtension 和 StatsExtension 代码
  • 这里遇到了同样的问题。服务定义没问题。似乎是一种奇怪行为的情况:在定义两个服务扩展时,只有最后一个定义的可用。此问题可能与 Twig 有关
  • 我有同样的问题,但前提是服务在同一个包中

标签: symfony twig symfony-2.1


【解决方案1】:

编辑:TL;DR。是的。有可能

我现在刚遇到这个问题。就我而言,这样做的原因是我从两个扩展的相同样板开始,并且每个扩展中的 getName() 函数返回相同的名称。

一旦我更改了函数在每个扩展上返回的名称,两个扩展都被添加了。我假设以下内容会起作用:

src/AppBundle/Twig/AppBundleFooExtension.php

/* ... */
public function getName()
{
    return 'appbundle_foo_extension';
}
/* ... */

src/AppBundle/Twig/AppBundleBarExtension.php

/* ... */
public function getName()
{
    return 'appbundle_bar_extension';
}
/* ... */

【讨论】:

    【解决方案2】:

    我在我的项目中使用了几个树枝扩展,一切都很好。您的 services.xml 包含服务标签? <services> // Services definition </services> 看起来像第二个服务优先覆盖。

    文章How to write a custom Twig Extension

    【讨论】:

    • 奇怪的是,我在 services.xml 文件中所做的一切就是移动我的服务定义的顺序。例如,我在我的扩展的两个定义之间插入了另一个 FormHandler 的服务定义,并且覆盖问题消失了......
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多