2017-04-08 3 views
3

Ich muss in der Lage sein, die Existenz eines Makros in Twig zu testen und es dynamisch aufzurufen.Test Vorhandensein eines Makros in Zweig 2

Hier ist, was ich versucht:

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

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

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

Aber ich bekomme diese Fehlermeldung: Accessing Twig_Template attributes is forbidden.

Grüße,

Antwort

2

Seit Zweig 1.20.0, Template Attribute nicht mehr aus Gründen der Sicherheit zur Verfügung stehen, also gibt es keinen einheimischen Weg, es richtig zu machen.

Sie können schließlich die Funktion source verwenden, um die Quelldatei des Makros zu erhalten und sie zu analysieren, um zu prüfen, ob ein Makro existiert, aber das ist eine Art hässlicher Hack, der leicht zu umgehen ist.

Beispiel:

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

Siehe this example live

Ein weiterer Ansatz wo Müsste eine custom test erstellen, um den Job zu erledigen.

+0

Danke dafür wusste ich nicht über 'source'. Wenn Ihr Makro Parameter aufweist, z. '{% macro foo (bar)%}', müssten Sie '' foo() ''aktualisieren, um die Quelle wörtlich, z. ''foo (bar)' 'oder' {% Makro foo (' '. – notacouch

Verwandte Themen