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
答案 0 :(得分:1)
我的假设:
您创建\ Twig_Environment的新实例。也许在Symfony之后以任何方式使用它,这显然没有任何扩展定义的函数。
查看手册,有一个initRuntime方法,其中“[...]您可以加载一些包含过滤功能的文件”。作为参数,您可以使用全局\ Twig_Environment实例。
所以,我会尝试将$ twig-&gt; loadTemplate()放入initRuntime(),将返回的对象保存到对象变量中并在getGlobals()中返回