Symfony变换器始终获得空值

时间:2017-01-11 15:37:34

标签: symfony symfony-forms

使用以下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

在这种情况下,我可能做错了什么?

2 个答案:

答案 0 :(得分:1)

数据转换器用于将字段的数据转换为可以在表单中显示的格式(并在提交时返回)。第一个将原始值转换为将用于渲染字段的格式。

因此,“数据”“原始值”是指来自底层对象的此字段的初始值。要查看不同的结果,您需要将默认值设置为codes字段(例如,如果它尚未来自DB)。否则它将始终为null

答案 1 :(得分:0)

结果是有一个FormEvents::PRE_SET_DATA附加到字段,即使它根本没有修改值,它导致值为null变压器。我将事件更改为FormEvents::POST_SET_DATA,这解决了问题。