Construire automatiquement un formulaire à l'aide de l'entité (un à un)

Je me demandais si il est possible de créer un formulaire à l'aide d'une entité afin d'obtenir tous les champs, dans un one-to-one relation. Pour clarifier:

J'ai un User.php entité (avec les champs nom, prénom, genre, etc) et un Address.php entité. Ce que je veux c'est de construire l'ensemble de la forme sans ajouter un par un les propriétés de l'Adresse de l'entité et de l'enregistrer avec la bonne relation dans la base de données.

C'est ce que j'ai essayé (j'ai trimed un peu le code), mais, évidemment, n'est pas de la bonne façon:

Entité utilisateur:

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;

Classe d'adresse

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;

Générateur de formulaire:

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'
            ));
}

Qui ne reçoit que le champ streetName de la table et la met dans une liste.

OriginalL'auteur Manu | 2012-03-01