添加不在实体中的自定义表单字段 - Sonata admin

Add custom form field that is not in entity - Sonata admin

我在我的项目中使用 Sonata Admin。我需要渲染一个不属于实体的字段。

考虑具有字段 用户名密码 的实体 用户。但是我还需要一个额外的字段作为 hobby 形式,但在用户实体中不需要它。

    $formMapper
       ->add('username')
       ->add('password')
       ->add('hobby');

但是我收到 symfony 错误,

既不是 属性 "hobby" 也不是 "getHobby()"、"hobby()"、"isHobby()"、"hasHobby()"、“__get()" 在 class "App\Entity\User" 中存在并具有 public 访问权限。

我该如何解决这个问题?提前致谢!!

如果我没记错的话,Symfony2 的这个答案应该仍然成立:How to add additional non-entity fields to entity form in Symfony2

In symfony 2.1+, use mapped:

$form = $this->createFormBuilder($promo)
    ->add('code', 'text')
    ->add('image', 'file', array(
                "mapped" => false,
            ))
    ->getForm();

https://symfony.com/doc/current/reference/forms/types/entity.html#mapped

type: boolean default: true

If you wish the field to be ignored when reading or writing to the object, you can set the mapped option to false.

所以对于你的情况,它应该是这样的:

$formMapper
    ->add('username')
    ->add('password')
    ->add('hobby', null, [
        'mapped' => false
    ]);