我想知道如何在另一个模板中呈现“模板”。 我有这种模板:
[...]
{% 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”值吗?
答案 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模板类中找到...