我有一个通过twig加载模板的对象,但是我想让模板访问对象变量ass wel, 我以为我可以使用一个名为this的标签,并在课堂上将其设置为$ this。
我尝试过这样的事情:
public function render_view($path, $file, $vars){
$this->loader = new Twig_Loader_Filesystem($path);
$this->twig = new Twig_Environment($this->loader, array());
if(!isset($vars['this'])){
$vars['this'] = $this;
}
$template = $this->twig->loadTemplate($file);
return $template->render($vars);
}
也试过
public function render_view($path, $file, $vars){
$this->loader = new Twig_Loader_Filesystem($path);
$this->twig = new Twig_Environment($this->loader, array());
$processwire_vars = array('user', 'pages', 'page', 'sanitizer', 'files', 'input', 'permissions', 'roles', 'templates', 'session', 'config', 'controller', 'wire');
foreach($processwire_vars as $key => $pw_v){
if(!isset($vars[$pw_v])){
$this->twig->addGlobal($pw_v, $this->$pw_v);
}
}
$this->twig->addGlobal('this', $this);
$template = $this->twig->loadTemplate($file);
return $template->render($vars);
}
在我的模板上
{{ this.title }}
{% this.render_snippet() %}
但是我得到了这个错误:
致命错误:异常:第7行“layout.php”中的未知标记名称“this”(在/xxx/xxx/public_html/site/modules/MvcModule/Twig/Parser.php第182行)#0
答案 0 :(得分:1)
您可以尝试将$ this用作Twig的全局变量
$twig = new Twig_Environment($loader);
$twig->addGlobal('this', $this);
或直接链接该功能:
$twig = new Twig_Environment($loader);
$twig->addFunction(
'render_snippet',
new Twig_Function_Function($this, 'render_snippet')
);
答案 1 :(得分:0)
我已经明白了。
必须是
{{而不是{%for functions。
多么愚蠢的错误。 感谢@mcuadros的帮助和时间! (我确实找到了答案,因为你的链接)