Symfony 更新细枝中的对象属性

Symfony 更新细枝中的对象属性,symfony,twig,Symfony,Twig,我已经查过了 我也有类似的问题 我有一个属性为其他对象的变量对象 所以我有一个主对象,我想把null放在它们的一个属性上 我尝试了这个选项,但他们失败了,当然,在每一行之前,我把错误,给我 set object.other = null -------------------------------------- Unexpected token "punctuation" of value "." ("end of statement block" expected) set object

我已经查过了

我也有类似的问题

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

所以我有一个主对象,我想把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

请提供帮助

为了使其正常工作,
对象
必须首先是一个对象。最后一次尝试的错误消息(合并过滤器)清楚地表明情况并非如此(在PHP中,每个对象都是可遍历的)。此外,对象必须具有名为
other
的公共属性

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


修复所有这些问题后(即,确保首先将对象分配给
对象
),合并筛选器将正常工作,就像在链接到的问题中一样。

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

第四个例子,使用Twig的合并过滤器,如果对象是数组、散列(即
{%set object={other:'something'}%}
)或可遍历类的实例,则可以使用。从Twig返回的错误消息中可以看出,您的对象不是这些类型中的任何一个:“合并筛选器仅适用于数组或“可遍历”,并将“object”作为第一个参数。”另外请注意,您有一个输入错误(正如aferber所提到的):您有
{'other',null}
,而您应该有
{'other':null}
(或
{other:null}

因此,您尝试在Twig中执行的操作无法开箱即用。您需要修改您的类(例如,创建一个将
other
属性设置为null的方法)或创建一个Twig扩展。该问题的答案显示了如何解决这些问题

第三种可能是修改类,使对象可遍历。然后可以使用合并筛选器


当然,还有一种可能性是停止尝试在Twig中执行此操作,例如在控制器中执行此操作(正如Frank B所建议的).

你能在冰箱里烤馅饼吗?不能。为什么?因为冰箱不是用来烤馅饼的!树枝是用来呈现视图的。不是用来构建对象的。这是你应该在控制器或任何服务中做的。在任何其他分配之前,对象都是初始化的。你能展示你的完整代码,特别是什么是
对象吗所以
dump(object)
it来显示它的样子。我需要覆盖对象来模拟错误,所以如果你不添加有用的东西,请弃权-1:首先,如果
object
未分配,Twig会说“…得到”NULL”作为第一个参数,“所以在OP的问题
中,object
显然是一个对象。第二,并不是每个对象都是可遍历的。第三,不,Twig的合并过滤器不适用于不可遍历的对象,它只适用于数组或可遍历的对象。