Symfony 转换器总是得到空值
Symfony transformer always getting a null value
我在使用以下 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
作为其参数。我希望这是我在实体上调用 getCodes
时得到的 ArrayCollection
。
在这种情况下我可能做错了什么?
数据转换器用于将字段的数据转换为可以在表单中显示的格式(并在提交时返回)。第一个将 原始值 转换为将用于呈现字段的格式。
所以,"the data"和"original value"指的是来自底层对象的这个字段的初始值。要查看不同的结果,您需要将默认值放入 codes
字段(例如,如果它尚未来自数据库)。否则它将永远是 null
.
结果是有一个 FormEvents::PRE_SET_DATA
附加到该字段,即使它根本没有修改值,它导致值为 null在变压器中。我将事件更改为 FormEvents::POST_SET_DATA
,这解决了问题。
我在使用以下 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
作为其参数。我希望这是我在实体上调用 getCodes
时得到的 ArrayCollection
。
在这种情况下我可能做错了什么?
数据转换器用于将字段的数据转换为可以在表单中显示的格式(并在提交时返回)。第一个将 原始值 转换为将用于呈现字段的格式。
所以,"the data"和"original value"指的是来自底层对象的这个字段的初始值。要查看不同的结果,您需要将默认值放入 codes
字段(例如,如果它尚未来自数据库)。否则它将永远是 null
.
结果是有一个 FormEvents::PRE_SET_DATA
附加到该字段,即使它根本没有修改值,它导致值为 null在变压器中。我将事件更改为 FormEvents::POST_SET_DATA
,这解决了问题。