自定义扩展后,Twig Base功能无法正常工作

时间:2013-09-30 20:24:16

标签: php symfony twig

TL; DR:我做了一个自定义的枝条扩展,现在枝条基本功能不起作用

所以有点背景故事。我有一个twig文件(masterMacro.html.twig),它保存了我所有的twig宏的引用。我试图创建一个twig全局变量,这样我就不必在每个页面上导入masterMacro.html.twig,而只需调用全局变量。

举例说明。而不是必须这样做

{% import 'FooBarbundle:Macros:masterMacros.html.twig' as macros %}
{{ macros.fooMacro() }}

我试图做到这一点,我只需要这样做:

{{ FooBarMacros.fooMacro() }}

所以我写了这个自定义扩展,如下所示:

/** FooBarBundle\Twig\Globals\FooBarBundleMacrosGlobal.php */
<?php

namespace Bar\FooBarBundle\Twig\Globals;


class FooBarBundleMacrosGlobal extends \Twig_Extension{

    /**
         * Returns a list of global variables to add to the existing list.
         *
         * @return array An array of global variables
         */
        public function getGlobals()
        {

            $loader = new \Twig_Loader_Filesystem(array('/web/bar/Bar/FooBarBundle/Resources/views/Macros'));

            $twig = new \Twig_Environment($loader);

            return array(
              'FooBarMacros' => $twig->loadTemplate('masterMacro.html.twig')
            );
        }

        public function getName(){
            return 'FooBarMacros';
        }

} 

然后将其注册为服务

services:
    foobar.twig.FooBarMacrosGlobal
        class:     Bar\FooBarBundle\Twig\Globals\FooBarMacrosGlobal
        tags:
           - { name: twig.extension }

所以好消息是全球宏观运作。我现在可以只调用FooBarMacros.fooMacro(),一切正常。但是,现在没有正常的枝条功能起作用。

例如,我正试图像这样使用转储,然后我遇到错误:

{{ dump('hello world') }}
The function "dump" does not exist in myTemplate.html.twig at line 219 

有任何线索发生了什么?这是我的第一个枝条延伸,所以我确定我搞砸了一些东西。

提前感谢您的帮助,

Drew Landgrave

1 个答案:

答案 0 :(得分:1)

我的假设:

您创建\ Twig_Environment的新实例。也许在Symfony之后以任何方式使用它,这显然没有任何扩展定义的函数。

查看手册,有一个initRuntime方法,其中“[...]您可以加​​载一些包含过滤功能的文件”。作为参数,您可以使用全局\ Twig_Environment实例。

所以,我会尝试将$ twig-&gt; loadTemplate()放入initRuntime(),将返回的对象保存到对象变量中并在getGlobals()中返回