使用以下CallBackTransformer
时遇到问题:
$builder->add(
$builder
->create('codes', 'hidden')
->addModelTransformer(new CallbackTransformer(
function ($codesCollection) {
if (!$codesCollection) {
return "{}"; // This is always returned
}
return implode(",", $codeCollection->toArray());
},
function ($codesString) {
return $codesString;
}
))
)
);
使用此表单的实体的codes
属性是多对多关系,在我测试的情况下,我检查了该值是否按预期设置。
反向转换回调接收到期望的字符串($codeString
),但转换回调每次都会收到null
作为参数。我希望这是在实体上调用ArrayCollection
时获得的getCodes
。
在这种情况下,我可能做错了什么?
答案 0 :(得分:1)
数据转换器用于将字段的数据转换为可以在表单中显示的格式(并在提交时返回)。第一个将原始值转换为将用于渲染字段的格式。
因此,“数据”和“原始值”是指来自底层对象的此字段的初始值。要查看不同的结果,您需要将默认值设置为codes
字段(例如,如果它尚未来自DB)。否则它将始终为null
。
答案 1 :(得分:0)
结果是有一个FormEvents::PRE_SET_DATA
附加到字段,即使它根本没有修改值,它导致值为null变压器。我将事件更改为FormEvents::POST_SET_DATA
,这解决了问题。