Обновление свойств объекта в ветке - PullRequest
31 голосов
/ 11 октября 2011

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

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

object
   property1
   property2

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

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

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

Ответы [ 5 ]

47 голосов
/ 03 октября 2013

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

{% set object = object|merge({'property1': 'somenewvalue'}) %}
4 голосов
/ 30 декабря 2011

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

class Get extends StdClass 
  {

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

  }
1 голос
/ 24 августа 2015

У меня была такая же проблема в моем шаблоне меню 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 -%}
0 голосов
/ 19 января 2017

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

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

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

this->property['key'][] = 'some value';
0 голосов
/ 06 апреля 2016
{{ set(object, 'property', value) }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...