使用实体(一对一关系)自动生成表单


Automatically build a form using entity (one to one relationship)

我想知道是否可以使用实体以一对一的关系构建一个表单来获取所有字段。澄清:

我有一个User.php实体(包含所有明显的字段,名称、姓氏、流派等)和一个Address.php实体。我想要的是在不逐个添加Address实体属性的情况下构建整个表单,并将其以适当的关系保存在数据库中。

这是我尝试过的(我对代码进行了一点三聚),但显然不是正确的方法:

用户实体:

class User implements UserInterface {
/**
 * @ORM'Id
 * @ORM'Column(type="integer")
 * @ORM'GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM'Column(type="string", length=100, nullable=TRUE)
 */
protected $firstName;
/**
 * @ORM'Column(type="string", length=200)
 * @Assert'NotBlank()
 */
protected $lastNames;
/**
 * @ORM'OneToOne(targetEntity="Capsa'Bundle'ClubCommonBundle'Entity'Address")
 */
protected $address;

地址类

class Address {
/**
 * @ORM'Id
 * @ORM'Column(type="integer")
 * @ORM'GeneratedValue(strategy="AUTO")
 */
protected $id;
/**
 * @ORM'Column(type="string", length=100, unique=TRUE)
 * @Assert'NotBlank()
 */
protected $streetName;
/**
 * @ORM'Column(type="string", length=50)
 */
protected $streetNumber;

表单生成器:

public function buildForm(FormBuilder $builder, array $options) {
    $builder->add('login', 'text')
            ->add('password', 'password')
            ->add('firstName', 'text', array("required" => FALSE))
            ->add('lastNames', 'text')
            ->add('address', 'entity', array(
                'class' => 'CapsaClubCommonBundle:Address',
                'property'=>'streetName'
            ));
}

它只获取表的字段streetName并将其放入列表中。

尝试使用集合表单类型而不是实体字段类型–请参阅本教程。