有没有办法在twig中更新对象的属性?将如下所示的对象传递给twig:
object property1 property2
我想这样更新property1:
{% set object.property1 = 'somenewvalue' %}
waxmsbnn1#
2013年的答复
您可以通过合并对象来完成此操作:
{% set object = object|merge({'property1': 'somenewvalue'}) %}
2023年更新
我不知道从哪个版本的twig开始这个解决方案就不起作用了,现在你只能用一个新的名字来创建一个对象:
{% set data = {foo:1} %} {% set updated = data|merge({ bar: 2 }) %} foo: {{ updated.foo }} {# Produces “foo: 1” #} bar: {{ updated.bar }} {# Produces “bar: 2” #}
osh3o9ms2#
Twig有一个do标记,允许您这样做。
{% do foo.setBar(value) %}
lyfkaqu13#
设置属性的一种可能方法是在对象中创建一个方法,该方法实际上创建新属性:
class Get extends StdClass { protected function setProperty($name,$value = null) { $this->$name = $value; } }
jqjz2hbq4#
我在knp菜单模板中遇到了同样的问题。我想用label块呈现一个替代字段,而不复制它。当然,底层对象需要一个属性的setter。
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 -%}
gev0vcfq5#
如果你的属性是array(object-〉property ['key']),你可以这样做:
{% set arr = object.property|merge({"key":['some value']}) %} {{ set(object, 'property', arr) }}
这相当于:
this->property['key'][] = 'some value';
piztneat6#
{{ set(object, 'property', value) }}
6条答案
按热度按时间waxmsbnn1#
2013年的答复
您可以通过合并对象来完成此操作:
2023年更新
我不知道从哪个版本的twig开始这个解决方案就不起作用了,现在你只能用一个新的名字来创建一个对象:
osh3o9ms2#
Twig有一个do标记,允许您这样做。
lyfkaqu13#
设置属性的一种可能方法是在对象中创建一个方法,该方法实际上创建新属性:
jqjz2hbq4#
我在knp菜单模板中遇到了同样的问题。我想用
label
块呈现一个替代字段,而不复制它。当然,底层对象需要一个属性的setter。gev0vcfq5#
如果你的属性是array(object-〉property ['key']),你可以这样做:
这相当于:
piztneat6#