【问题标题】:Add custom form field that is not in entity - Sonata admin添加不在实体中的自定义表单字段 - Sonata 管理员
【发布时间】:2018-08-03 07:10:56
【问题描述】:

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

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

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

但是我得到了 symfony 错误,

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

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

【问题讨论】:

  • 嗯,你可以用 Bananaapple 提供的答案来做,但是你会把爱好存放在哪里?
  • "hobby" 只是一个示例字段。我有几个像爱好这样的字段需要存储在多个表中。
  • 啊,明白了。那么您需要使用 preUpdate 挂钩来访问数据并对其进行处理。 :)
  • 是的!我用过 $this->getForm()->get('hobby')->getData();获得“爱好”的价值

标签: php symfony sonata-admin


【解决方案1】:

如果我没记错的话,这个 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();

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
    ]);

【讨论】:

  • 太棒了。我不知道解决方案会这么简单。谢谢。
  • 你能帮我吗,如何在索纳塔管理课中获得爱好的价值?
  • 这可能会有所帮助 - stackoverflow.com/questions/21515172/…
猜你喜欢
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多