Обновление свойств объекта в веточке

Есть ли способ обновить свойство объекта в twig?

Объект, подобный следующему, передается веточке:

object property1 property2 

Я хотел бы обновить свойство1 следующим образом:

 {% set object.property1 = 'somenewvalue' %} 

Вышеприведенный код не работает, но возможно ли сделать что-то подобное в twig? Если нет, есть ли способ написать расширение или макрос для этого?

Вы можете сделать это, объединив объекты:

 {% set object = object|merge({'property1': 'somenewvalue'}) %} 

Возможным способом установки свойства является создание метода в объекте, который фактически создает новые свойства:

 class Get extends StdClass { protected function setProperty($name,$value = null) { $this->$name = $value; } } 

У меня была та же проблема в моем шаблоне меню knp. Я хотел сделать альтернативное поле с блоком label , не дублируя его. Конечно, базовому объекту нужен наборщик для свойства.

 {%- block nav_label -%} {%- set oldLabel = item.label %} {%- set navLabel = item.getExtra('nav_label')|default(oldLabel) %} {{- item.setLabel(navLabel) ? '' : '' }} {{- block('label') -}} {{- item.setLabel(oldLabel) ? '' : '' }} {%- endblock -%} 

Если ваше свойство является массивом (object-> property ['key']), вы можете сделать что-то вроде этого:

 {% set arr = object.property|merge({"key":['some value']}) %} {{ set(object, 'property', arr) }} 

Это эквивалентно:

 this->property['key'][] = 'some value'; 
 {{ set(object, 'property', value) }}