我需要能够在Twig中测试宏的存在并动态调用它。
以下是我的尝试:
{% macro test(value) %}
Value: {{ value }}
{% endmacro %}
{% import "_macros.html.twig" as macro %}
{{ attribute(macro, 'test', ['foo']) }}
但是我收到了这个错误:Accessing Twig_Template attributes is forbidden.
此致
答案 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 %}
另一种方法是创建一个custom test来完成这项工作。