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(( 中返回它