更新树枝中的对象属性

时间:2017-01-27 20:32:01

标签: symfony twig

我已经查看了post

我有类似的问题

我有一个带有其他对象属性的变量对象

所以我有主要对象,我想把null放到他们的一个属性

我尝试了这个选项,但是他们当然失败了,在每行之前我把错误给了我

set object.other = null
--------------------------------------
Unexpected token "punctuation" of value "." ("end of statement block" expected) 

set object["other"] = null
--------------------------------------
Unexpected token "punctuation" of value "[" ("end of statement block" expected)

set (object, 'other', null)
--------------------------------------
Only variables can be assigned to. Unexpected token "punctuation" of value "(" ("name" expected) 

set object = object|merge({'other',null})
--------------------------------------
The merge filter only works with arrays or "Traversable", got "object" as first argument

请帮助

2 个答案:

答案 0 :(得分:0)

前三个示例不是有效的Twig语法,如错误消息所示。

第四个例子,使用Twig的合并过滤器,如果您的对象是数组,散列(即{% set object = { other: 'something' } %})或Traversable类的实例,则可以使用。您的对象不是这些,从Twig返回的错误消息可以看出:'合并过滤器仅适用于数组或“Traversable”,得到“对象”作为第一个参数。'另请注意你有一个错字(正如aferber已经提到的):你有{'other', null}而你应该有{'other': null}(或{other: null})。

因此,你想要做的事情不能在Twig中开箱即用。您需要修改您的类(例如,创建一个将other属性设置为null的方法)或创建一个Twig扩展。 Adding a property to an object in twig这个问题的答案显示了如何处理这些解决方案。

第三种可能性是修改你的类,使对象是Traversable。然后你可以使用合并过滤器。

当然还有一种可能性就是停止尝试在Twig中这样做并做到这一点,例如在控制器中(正如Frank B已经建议的那样)。

答案 1 :(得分:-1)

为了实现这一点,object必须首先成为一个对象。上次尝试(合并过滤器)的错误消息清楚地表明情况并非如此(在PHP中,每个对象都是可遍历的)。此外,该对象必须具有名为other public 属性。

您还应该注意{'other',null}{'other': null}之间的区别。

修复所有这些问题后(例如,确保首先将对象分配给object),合并过滤器将起作用,就像在链接到的问题中一样。