2017-12-28 4 views
1

In Zweig Vorlage hinzufügt Ich habe ein Objekt mit mehreren Ebenen Ich brauche ein neues Objekt in dem mehr Objekt als UnterobjektZweig: wie ein Objekt in Multi-Level-Objekt

{% 
    set data = { 
    'first': 'First', 
    'data': { 
     'val_1': 'val_1' 
     } 
    } 
%} 

soll dies hinzuzufügen sein val_2: val_2

erwartetes Ergebnis zu Daten hinzugefügt:

{% 
    set data = { 
    'first': 'First', 
    'data': { 
     'val_1': 'val_1', 
     'val_2': 'val_2' 
     } 
    } 
%} 

Antwort

0

Zuerst in Zweig Terminologie, das ist nicht ein Objekt oder eine Schlüssel-Wert-Array aber ein Hash (see Twig's documentation of literals).

Sie können ein Element nicht zu einem Hash hinzufügen, z. indem Sie {% set data.second = 'Second' %} tun. Stattdessen müssen Sie die merge filter verwenden: So

{% 
    set data = data|merge({ 
     second: 'Second', 
    }) 
%} 

{{ dump(data) }} 

{# Prints this: 

array(3) { 
    ["first"]=> 
    string(5) "First" 
    ["data"]=> 
    array(1) { 
    ["val_1"]=> 
    string(5) "val_1" 
    } 
    ["second"]=> 
    string(6) "Second" 
} 

#} 

, ein Element zu einem Hash in einem Hash hinzuzufügen, müssen Sie zweimal den Merge-Filter verwenden:

{% 
    set data = data|merge({ 
     data: data.data|merge({ 
      val_2: 'val_2', 
     }), 
    }) 
%} 

{# Prints this: 

array(3) { 
    ["first"]=> 
    string(5) "First" 
    ["data"]=> 
    array(1) { 
    ["val_1"]=> 
    string(5) "val_1" 
    ["val_2"]=> 
    string(5) "val_2" 
    } 
    ["second"]=> 
    string(6) "Second" 
} 

#} 

Wenn Sie viele dies tun Eine Art von variabler Manipulation in Twig könnte ein Zeichen dafür sein, dass ein Teil dieses Codes besser in einen Controller oder ein Modell oder was auch immer eingefügt werden könnte.

Verwandte Themen