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

时间:2016-04-22 14:35:23

标签: php twig

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

谢谢

1 个答案:

答案 0 :(得分:1)

您可以通过创建扩展twig的自定义类,在Twig_Template中破解它 它感觉有点脏,但它大致工作。

请注意:Twig为使用get的每个宏添加前缀,因此如果您有{% macro getField .... %},则会显示getgetField当前解决方案。< / em>的

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',
    ));

template.twig

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