2011-10-10 22 views
22

dal içinde bir nesnenin özelliğini güncellemek için bir yolu var mı?güncellenmesi nesne özellikleri

object 
    property1 
    property2 

böyle özellik1 güncellemek istiyorum:

aşağıdaki gibi bir nesne dal geçirilir

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

Yukarıdaki kod çalışmaz, ama bunu yapmak mümkündür Bu dalda böyle bir şey? Değilse, bunu yapmak için bir uzantı veya makro yazmanın bir yolu var mı?

class Get extends StdClass 
    { 

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

    } 
+0

Lütfen cevabımı aşağıda görmezden gelin, çok güncel değil ve artık kabul edilen cevap olmamalı. Ne yazık ki kabul edilen cevap olduğu için onu silemiyorum. – rdjs

+0

@rdjs Bana bildirdiğiniz için teşekkür ederiz! Kabul edilen cevabı değiştirdim! – F21

+0

Kabul edilen yanıt yalnızca nesneler değil, diziler ve karmalar için çalışır. – Duane

cevap

40

, birleştirme nesneler tarafından bunu yapabilirsiniz:

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

1 Büyük doğal yolu' propertyName' oluşturmak/ayarlayacaktır. Tek kullanım senaryosu için mükemmeldir. obj özelliklerini güncellemek için bir yolu yoktur Yani – Frizi

+25

'birleştirme filtre yalnızca diziler ya hashes' – gondo

+0

http://twig.sensiolabs.org/doc/filters/merge.html – Jekis

4

bir özelliği ayarlamak sağlayan bir yolu aslında yeni özellikler oluşturur nesnesinde bir yöntem oluşturmaktır knp menü şablonumda aynı sorun. Bunu çoğaltma olmadan, label bloğuyla alternatif alanının oluşturulmasında istedi. Tabii ki, temel nesnenin mülk için bir belirleyiciye ihtiyacı vardır.

{%- 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

Bu yöntemi ortak ayarlamak zorunda kaldı, ama gerçekten güzel bir çözüm –

+0

Ne nedir? Ve dünyaya nasıl Twig deniyorsunuz? –

+0

@BrunoSantos 'object.setProperty ("propertyName", 3)' Bu bunu yapmak için '3 ' –

1

Ben

-3
{{ set(object, 'property', value) }} 
+0

eserleri Sen :) – Ros

0

mülk dizisi ise (nesne-> özellik [ 'anahtar']) Eğer böyle bir şey yapabilirsiniz:

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

O eşdeğeri:

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

için –

+1

yine benim zamandan tasarruf, sadece yii2 – certainlyakey