2012-02-29 195 views
2

我想知道如何呈現「另一個模板內的模板」。 我有這樣的模板:枝條呈現模板內的模板

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

「page.content」可以用一些樹枝價值! 例如,它可以包含類似

{{ myObject.poperty }} 

甚至

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

默認情況下一些電話,page.content的內容不被嫩枝解析。 所以我做了一個擴展,我能夠解析調用像 {{page.content}}

我的擴展樣子:

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

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

但是,我還是沒能rendre第二種電話{%渲染....%}的

我試圖做:

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

但我堅持...

你知道我該如何呈現我的「page.content」值嗎?

回答

1

所以我創建了一個PHP擴展樹枝,和一個解決方案似乎是:

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模板類中找到...