2012-12-04 12 views
8

Ich versuche, eine Variable zu verwenden, um einen bestimmten Makronamen aufzurufen.Verwenden von Zweigvariable zum dynamischen Aufrufen einer importierten Makrounterfunktion

Ich habe eine Datei, die Makros

{% import 'form-elements.html.twig' as forms %} 

Jetzt gibt in dieser Datei importiert wird, sind alle Formularelemente Makros: Text, Textfeld, wählt, Radio usw.

Ich habe ein Array-Variable dass übergeben wird, dass ein Element in sie hat:

$elements = array(
    array(
     'type'=>'text, 
     'value'=>'some value', 
     'atts'=>null, 
    ), 
    array(
     'type'=>'text, 
     'value'=>'some other value', 
     'atts'=>null, 
    ), 
); 

{{ elements }} 

was im Versuch, die Elemente aus dem Makros zu tun ist, zu erzeugen. sie gut funktionieren, wenn sie von Namen genannt:

{{ forms.text(element.0.name,element.0.value,element.0.atts) }} 

jedoch, was ich ist so etwas zu tun:

{% for element in elements %} 
{{ forms[element.type](element.name,element.value,element.atts) }} 
{% endfor %} 

ich folgendes alles, was zur gleichen Fehler versucht haben:

{{ forms["'"..element.type.."'"](element.name,element.value,element.atts) }} 
{{ forms.(element.type)(element.name,element.value,element.atts) }} 
{{ forms.{element.type}(element.name,element.value,element.atts) }} 

Dies führt leider den folgenden Fehler:

Fatal error: Uncaught exception 'LogicException' with message 'Attribute "value" does not exist for Node "Twig_Node_Expression_GetAttr".' in Twig\Environment.php on line 541 

Jede Hilfe oder Beratung zu einer Lösung oder einem besseren Schema wäre sehr hilfreich.

Antwort

15

Ich dachte nur, andere Leute dazu, die Antwort mögen, wie fabpot bieten:

This is indeed something that is not supported: calling a macro with a dynamic name (I have added a proper exception to be clearer about the issue).

If you really want to do that, you can do so with the following code:

{{ attribute(forms, element.type, [element.name,element.value,element.atts]) }}

-fabpot

https://github.com/twigphp/Twig/issues/922#issuecomment-11133299

+1

In Twig 2, ist dies nicht mehr eine Lösung :(von dem, was ich verstehe, für Attribut "Sicherheitsgründe" kann nicht auf Vorlagen zugreifen. – notacouch

Verwandte Themen