2011-10-10 3 views
22

나뭇 가지에서 개체 속성을 업데이트하는 방법이 있습니까?나뭇 가지에서 개체 속성 업데이트

object 
    property1 
    property2 

이 같은 속성 1 업데이 트하려는 :

다음과 같은 객체는 나뭇 가지에 전달됩니다

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

위의 코드가 작동하지 않습니다,하지만 할 수 있습니다 나뭇 가지에서 이런 거? 그렇지 않다면이를 수행 할 확장 또는 매크로를 작성하는 방법이 있습니까?

class Get extends StdClass 
    { 

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

    } 
+0

아래의 내 답변을 무시하십시오, 그것은 매우 시대에 뒤떨 롭고 더 이상 받아 들여진 응답이어야합니다. 불행히도 나는 그것을 받아 들일 수있는 대답이기 때문에 그것을 지울 수 없다. – rdjs

+0

@rdjs 알려 주셔서 감사합니다! 나는 받아 들여진 응답을 바꿨다! – F21

+0

허용되는 대답은 객체가 아닌 배열과 해시에 대해서만 작동합니다. – Duane

답변

40

당신은 병합 개체에 의해 그것을 할 수 있습니다 :

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

+1 이것을 수행하는 훌륭한 기본 방법. 단일 사용 시나리오에 완벽합니다. – Frizi

+25

'병합 필터는 배열이나 해시와 만 작동합니다 ' – gondo

+0

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

4

속성을 설정하기위한 가능한 방법은 실제로 새 속성을 생성하는 객체의 메서드를 만드는 것입니다 내 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 -%} 
+1

이 메서드를 공용으로 설정해야했지만 실제로는 좋은 솔루션입니다. –

+0

무엇을? 그리고 어떻게 세상에서 그것을 나뭇 가지에서 불러내나요? –

+0

@BrunoSantos'object.setProperty ("propertyName", 3)'이렇게하면 'propertyName'을'3'으로 설정/생성합니다. –

1

내가 있었다

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

은 yii2에서만 작동합니다. – Ros

0

재산이 배열 인 경우 (객체 -> 속성 [ '키'])은 다음처럼 수행 할 수 있습니다

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

을 그 상당 :

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

내 시간을 저장했습니다. –

+1

다시 yii2 – certainlyakey

관련 문제