有没有办法列出 Twig 模板中定义的所有宏


Is there a way to list all macros defined in a Twig template?

我得到了一个树枝模板A,它基本上由许多树枝宏组成。我将该模板包含在另一个树枝模板 B 中。我可以以某种方式在模板 B 中列出模板 A 中定义的所有宏吗?如果不是,可以使用PHP控制器来完成吗?

谢谢

您可以通过

创建一个扩展Twig_Template
的自定义类来twig破解它感觉有点脏,但效果很粗.

请注意:Twig您用get创建的每个宏都带有前缀,因此如果您有{% macro getField .... %},它将显示当前解决方案的getgetField

abstract class Template extends 'Twig_Template {
    public function getDefinedFunctions() {
        return array_diff(get_class_methods($this), array_merge(['getDebugInfo', 'getDefinedFunctions'], get_class_methods(''Twig_Template'), get_class_methods('My'ProjectName'Here'Template')));
    }   
}

将自定义模板类注册到twig

<?php   
    $loader = new Twig_Loader_Filesystem(__DIR__ . '/path/to/views');
    $twig = new Twig_Environment($loader, array(
        'base_template_class'   => ''My'ProjectName'Here'Template',
    ));

模板.树枝

{% import "macros/forms.html" as forms %}
<ul>
{% for function in forms.DefinedFunctions %}
    <li>{{ function }}</li>
{% endfor %}
</ul>