【问题标题】:Symfony 2 Form inheritanceSymfony 2 表单继承
【发布时间】:2012-11-15 14:05:00
【问题描述】:

我遇到了使用 symfony2 和教义 2 进行表单继承的问题。 事情是这样的:

我有一个实体 users 没什么特别的,只有几个字段,包括名称、电子邮件等......

Ferncoder\Devis\UserBundle\Entity\users:
  type: entity
  table: null
  fields:
    id:
      type: integer
      id: true
      unsigned: true
      nullable: false
      generator:
        strategy: AUTO
    name:
      type: string
      length: '45'
      nullable: false

我有一个实体 craftsMans,此表与 users 实体有 OneToOne 关系。

Ferncoder\Devis\UserBundle\Entity\craftsMan:
  type: entity
  oneToOne:
    user:
      targetEntity: users
      joinColumn:
        name: user_id
        referencedColumnName: id
  table: null
  fields:
    id:
      type: integer
      id: true
      unsigned: true
      nullable: false
      generator:
        strategy: AUTO

我生成了 2 个表单类 usersTypecraftsmanType。为了创建我的 CraftsMan,我已经完成了这样的表单:

class craftsManType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('user', new usersType())
            ->add('company', 'text')
            ->add('fieldOfActivities', 'text')
            ->add('legalForm', 'text')
            ->add('siret', 'text')
            ->add('website', 'text')
            ->add('description', 'textarea')
            ->add('services', 'textarea')
            ->add('employee', 'text')
            ->add('phone', 'text')
        ;
    }

在我想要获取字段值之前,我的表单看起来很酷。问题是我的'user' 字段作为数组而不是实体返回。我错过了什么吗?如何从字段user 生成我的用户对象。我不觉得创建对象可能设置所有属性是最好的方法。

也许我错了。

谢谢,

【问题讨论】:

  • 在视图级别,每种数据类型都呈现为简单的字符串或数组。在模型级别,您应该能够在绑定表单后获取对象。您尝试在哪个级别获取值?
  • 验证表单后,我想在控制器中执行此操作。

标签: php symfony doctrine-orm


【解决方案1】:

您必须设置 data_class 选项以返回对象而不是数组。 下面的文档解释了当表单嵌入到另一个表单中时,需要使用 data_class。

文档:http://symfony.com/doc/current/book/forms.html#book-forms-data-class

【讨论】:

    【解决方案2】:

    在您的控制器中:

    $form->getData()->getUser();
    

    【讨论】:

    • 我已经这样做了,但是getUser() 返回一个包含我所有用户表单字段的数组,我想要的是实体。似乎没有其他选项可以从数组中填充实体...
    • 表格绑定了吗? $form->bind($request);在 $form->getData()->getUser(); 之前这样做;
    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2013-02-24
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多