Twig无法访问对象

时间:2013-11-22 00:13:25

标签: php object twig

我有一个通过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

2 个答案:

答案 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')
);

http://twig.sensiolabs.org/doc/advanced.html#functions

答案 1 :(得分:0)

我已经明白了。

必须是

{{而不是{%for functions。

多么愚蠢的错误。 感谢@mcuadros的帮助和时间! (我确实找到了答案,因为你的链接)