Twig Base 函数在自定义扩展后不起作用


Twig Base functions not working after custom extension made

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

所以有点背景故事。我有一个树枝文件(masterMacro.html.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 

知道发生了什么吗?这是我第一次伸展树枝,所以我确定我在那里搞砸了一些东西。

提前感谢您的帮助,

鲁·兰德格雷夫

我的假设:

创建 ''Twig_Environment 的新实例。也许这在Symfony之后以任何方式使用,这显然没有任何扩展定义的功能。

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

因此,我会尝试将 $twig->loadTemplate(( 放入 initRuntime(( 中,将返回的对象保存到对象变量中并在 getGlobals(( 中返回它