Gibt es eine Möglichkeit, die Eigenschaft eines Objekts in Twig zu aktualisieren?
Ein Objekt wie das folgende wird an twig übergeben:
object
property1
property2
Ich möchte Property1 wie folgt aktualisieren:
{% set object.property1 = 'somenewvalue' %}
Der obige Code funktioniert nicht, aber ist es möglich, so etwas in Twig zu tun? Wenn nicht, gibt es eine Möglichkeit, eine Erweiterung oder ein Makro dafür zu schreiben?
Bitte ignorieren Sie meine Antwort unten, sie ist sehr veraltet und sollte nicht mehr die akzeptierte Antwort sein. Leider kann ich es nicht löschen, da es die akzeptierte Antwort ist.
– rdjs
19. Oktober 2015 um 15:14 Uhr
@rdjs Danke, dass du mich informiert hast! Ich habe die akzeptierte Antwort ausgetauscht!
– F21
19. Oktober 2015 um 21:10 Uhr
Die akzeptierte Antwort funktioniert nur für Arrays und Hashes, nicht für Objekte.
Sie können dies tun, indem Sie Objekte zusammenführen:
{% set object = object|merge({'property1': 'somenewvalue'}) %}
+1 großartige native Möglichkeit, dies zu tun. Perfekt für Einzelnutzungsszenarien.
– Fritzi
7. November 2013 um 11:11 Uhr
Warum ist dies die akzeptierte Antwort? Funktioniert das nur unter einigen Twig-Versionen?
– Sylbru
8. November 2017 um 11:02 Uhr
Dies sollte nicht die akzeptierte Antwort sein, da sie nicht auf die Frage „Wie werden Eigenschaften eines Objekts aktualisiert?“ reagiert.
– Tim Tim
3. Oktober 2018 um 11:09 Uhr
Dies sollte in der Tat nicht die akzeptierte Antwort sein – gemäß Twig-Fehlerausgabe: Der Zusammenführungsfilter funktioniert nur mit Arrays oder “Traversable”, hat “object” als erstes Argument. Die Antwort von @Baishu unten funktioniert für meinen Objekt-Anwendungsfall
– Ludo
12. November 2021 um 14:26 Uhr
Baishu
Zweig hat eine tun Tag, mit dem Sie dies tun können.
{% do foo.setBar(value) %}
Eine Möglichkeit, eine Eigenschaft festzulegen, besteht darin, eine Methode im Objekt zu erstellen, die tatsächlich neue Eigenschaften erstellt:
class Get extends StdClass
{
protected function setProperty($name,$value = null)
{
$this->$name = $value;
}
}
Ich musste diese Methode öffentlich machen, aber es ist in der Tat eine nette Lösung
– Nikolaus BADIA
29. November 2017 um 17:39 Uhr
Was? Und wie um alles in der Welt nennt man das von Twig?
– Bruno Santos
29. Januar 2018 um 13:17 Uhr
@BrunoSantos object.setProperty("propertyName", 3) dies wird gesetzt/erstellt propertyName zu 3
– Pavel Kostenko
27. Februar 2018 um 8:40 Uhr
im Zweig: {% do object.setProperty("propertyName", 3) %}
– simohe
26. Oktober 2018 um 8:12 Uhr
Ich hatte das gleiche Problem in meiner Knp-Menüvorlage. Ich wollte ein alternatives Feld mit dem rendern label blockieren, ohne sie zu duplizieren. Natürlich benötigt das zugrunde liegende Objekt einen Setter für die Eigenschaft.
Bitte ignorieren Sie meine Antwort unten, sie ist sehr veraltet und sollte nicht mehr die akzeptierte Antwort sein. Leider kann ich es nicht löschen, da es die akzeptierte Antwort ist.
– rdjs
19. Oktober 2015 um 15:14 Uhr
@rdjs Danke, dass du mich informiert hast! Ich habe die akzeptierte Antwort ausgetauscht!
– F21
19. Oktober 2015 um 21:10 Uhr
Die akzeptierte Antwort funktioniert nur für Arrays und Hashes, nicht für Objekte.
– Duane
23. März 2016 um 5:50 Uhr
Ich habe dazu ein Problem erstellt: github.com/twigphp/Twig/issues/2768
– simohe
26. Oktober 2018 um 10:49 Uhr
Laut der Symfony-Crew ist der Versuch, dies zu tun, “Geschäftslogik im Zweig”, was vermieden werden sollte. Sehen github.com/twigphp/Twig/issues/2768#issuecomment-442368654
– simohe
13. November 2019 um 9:46 Uhr