从PHP渲染Twig宏?

时间:2015-07-21 21:02:01

标签: php macros twig

我目前正在将项目从旧的基于自定义XML的模板引擎迁移到Twig。为了简化过渡,我认为能够从旧引擎内部渲染Twig宏可能会很好,这样就可以使用Twig构建新的小部件,并根据需要在两个地方运行。

我能想到的唯一方法就是生成一些如下所示的Twig源代码:

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

然后做一些疯狂的事情

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

这似乎缓慢,危险和脆弱。有没有更好的方法来使用Twig API?

1 个答案:

答案 0 :(得分:1)

是的,要渲染模板,您应该使用:

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

loadTemplate将编译twig源(如果缓存中不存在。

render方法将安全地渲染您的模板。

一个宏基本上是编译类的一个方法(参见这个小提琴的编译模板链接:http://twigfiddle.com/orfp3d)你可以很容易地从外面调用一个宏,但不建议这样做(因为你的宏不会部分TemplateInterface