树枝渲染模板内的模板

时间:2012-02-29 16:16:37

标签: templates twig render nodes

我想知道如何在另一个模板中呈现“模板”。 我有这种模板:

[...]
{% autoescape false %}
    {{ page.content }}
{% endautoescape %}
[...]

“page.content”可以用一些树枝估价! 例如,它可以包含一些调用,如

{{ myObject.poperty }}

甚至

{% render "MyBundle:Bundle:myAction" with {'title': myObject.title} %}

默认情况下,Twig不会解析page.content的内容。 所以我做了一个扩展,我能够解析像这样的调用 {{page.content}}

我的扩展程序如下:

$loader     = new \Twig_Loader_String();
$this->environment->setLoader($loader);

$template   = $this->environment->loadTemplate($string);
$output     = $template->display(array('myObject' => $object));

但我仍然无法回复第二种电话{%render ....%}

我试过这样做:

$stream     = $this->environment->tokenize($string);
$nodes      = $this->environment->parse($stream)->getNode('body')->getNode(0);
$output     = $this->environment->compile($nodes);

但我被卡住了......

你知道如何渲染我的“page.content”值吗?

1 个答案:

答案 0 :(得分:1)

所以我创建了一个php twig扩展,一个解决方案似乎是:

public function parsingTwig($source, $context)
    {
        $stream     = $this->env->tokenize($source);
        $iterator   = $this->env->parse($stream)->getNode('body')->getIterator();

        while ($iterator->valid())
        {
            $current = $iterator->current();
            $output  = $this->env->compile($current);
            eval($output);
            $iterator->next();
        }
}

您需要定义一些函数,如'getAttribute'或'getContext'。这些函数可以在twi模板类中找到...