编程语言
首页 > 编程语言> > php-测试Twig 2中是否存在宏

php-测试Twig 2中是否存在宏

作者:互联网

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

这是我尝试过的:

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

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

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

但我收到此错误:禁止访问Twig_Template属性.

问候,

解决方法:

从Twig 1.20.0开始,出于安全原因,模板属性不再可用,因此没有本机方法可以正确地进行操作.

您最终可以使用source函数来获取宏的源文件并对其进行解析,以检查宏是否存在,但这是一种易于绕过的丑陋的hack.

例:

主枝

{% 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 %}

宏树枝

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

参见this example live

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

标签:symfony,twig,php
来源: https://codeday.me/bug/20191111/2020342.html