在Twig 2中测试宏的存在

时间:2017-04-08 12:17:00

标签: php symfony twig

我需要能够在Twig中测试宏的存在并动态调用它。

以下是我的尝试:

{% macro test(value) %}
    Value: {{ value }}
{% endmacro %}

{% import "_macros.html.twig" as macro %}

{{ attribute(macro, 'test', ['foo']) }}

但是我收到了这个错误:Accessing Twig_Template attributes is forbidden.

此致

1 个答案:

答案 0 :(得分:3)

自Twig 1.20.0起,出于安全原因,模板属性不再可用,因此没有正确的方法可以正常完成。

你最终可以使用source函数获取宏的源文件并解析它以检查宏是否存在,但这是一种容易绕过的丑陋黑客。

示例:

main.twig

{% import 'macros.twig' as macros %}

{% set sourceMacros = source(macros) %}

foo {% if 'foo()' in sourceMacros %} exists {% else %} does not exist {% endif %}

bar {% if 'bar()' in sourceMacros %} exists {% else %} does not exist {% endif %}

macros.twig

{% macro foo() %}
Hello, world!
{% endmacro %}

请参阅this example live

另一种方法是创建一个custom test来完成这项工作。