我已经查看了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
请帮助
答案 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
),合并过滤器将起作用,就像在链接到的问题中一样。