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

Vin*_*h S 2 php symfony sonata-admin

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

考虑具有字段usernamepassword 的实体User。但是我还需要一个额外的字段作为表单中的爱好,但在 User 实体中不需要它。

    $formMapper
       ->add('username')
       ->add('password')
       ->add('hobby');
Run Code Online (Sandbox Code Playgroud)

但我收到了 symfony 错误,

属性“hobby”和方法“getHobby()”、“hobby()”、“isHobby()”、“hasHobby()”、“__get()”都不存在并且在类“App\”中具有公共访问权限实体\用户”。

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

Ban*_*ple 5

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

在 symfony 2.1+ 中,使用映射:

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

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

类型boolean 默认true

如果您希望在读取或写入对象时忽略该字段,您可以将该mapped选项设置为false

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

$formMapper
    ->add('username')
    ->add('password')
    ->add('hobby', null, [
        'mapped' => false
    ]);
Run Code Online (Sandbox Code Playgroud)