web-dev-qa-db-de.com

Objekteigenschaften in twig aktualisieren

Gibt es eine Möglichkeit, die Eigenschaft eines Objekts im Zweig zu aktualisieren?

Ein Objekt wie das folgende wird an twig übergeben:

object
   property1
   property2

Ich möchte property1 folgendermaßen aktualisieren:

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

Der obige Code funktioniert nicht, aber ist es möglich, so etwas im Zweig zu machen? Wenn nicht, gibt es eine Möglichkeit, eine Erweiterung oder ein Makro zu schreiben, um dies zu tun?

28
F21

Sie können dies tun, indem Sie Objekte zusammenführen:

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

Eine Möglichkeit zum Festlegen einer Eigenschaft besteht darin, im Objekt eine Methode zu erstellen, mit der tatsächlich neue Eigenschaften erstellt werden:

class Get extends StdClass 
  {

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

  }
4
New linux user

Ich hatte das gleiche Problem in meiner knp-Menüvorlage. Ich wollte ein alternatives Feld mit dem Block label rendern, ohne es zu duplizieren. Natürlich benötigt das zugrunde liegende Objekt einen Setter für die Eigenschaft.

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

Wenn Ihre Eigenschaft ein Array ist (object-> property ['key']), können Sie Folgendes tun:

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

Das entspricht:

this->property['key'][] = 'some value';
0
DarkAiR