2

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 

有什么线索吗?这是我的第一个树枝扩展,所以我确定我在那里搞砸了。

我在这里先向您的帮助表示感谢,

德鲁·兰德格雷夫

4

1 回答 1

1

我的假设:

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

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

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

于 2013-09-30T20:44:49.237 回答