从 PHP 渲染 Twig 宏?

Render Twig macro from PHP?

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

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

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

然后做一些疯狂的事,比如

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

这看起来缓慢、危险且脆弱。有没有更好的方法来利用 Twig API?

是的,要呈现模板,您应该使用:

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

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

render 方法将安全地呈现您的模板。

宏基本上是编译class的方法(参见本fiddle的编译模板link:http://twigfiddle.com/orfp3d)你可以从外部调用宏很容易,但不推荐这样做(因为您的宏不会参与 TemplateInterface