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,这解决了问题。