2015-07-21 67 views
1

我目前正在將一個項目從舊的自定義基於XML的模板引擎遷移到Twig。爲了簡化轉換,我認爲能夠從舊引擎內部渲染Twig宏,以便可以使用Twig構建新的小部件,並根據需要在兩處運行。從PHP呈現Twig宏?

我能想到這樣做的唯一的辦法是產生一些細枝源代碼,看起來像這樣:

{% import 'macros.twig' as m %} 
{{ m.widget(...) }} 

然後不喜歡

eval('?>'.$twig->compileSource($twig->getLoader()->getSource($name), $name)); 

一些瘋狂這似乎慢,危險,而且脆弱。有沒有更好的方法來使用Twig API?

回答

1

是,呈現模板,你應該使用:

echo $twig->loadTemplate($name)->render($context); 

loadTemplate將編譯樹枝來源,如果它不存在緩存。

render方法將安全地呈現您的模板。

宏基本上是編譯類的一種方法(請參閱此小提琴的編譯模板鏈接:http://twigfiddle.com/orfp3d),您可以很容易地從外部調用宏,但不建議這樣做(因爲您的宏不會參與TemplateInterface

+0

'loadTemplate'會給我一個編譯類的實例嗎?所以我基本上只需要調用'get {$ macroName}'?我不確定你的意思是「不會參加'TemplateInterface'」嗎? – mpen

+0

簡單的好習慣;) –