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
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser Formulaire de collecte de type au lieu de l'Entité type de champ – voir ce tutoriel.
->add('address', new AddressType());
bien sûr, defyining AddressTypevotre commentaire est vraiment la réponse - al du moins celui qui a fonctionné pour moi. Merci.
Suivant Manu le commentaire de ici est la nouvelle syntaxe :
->add('address', AddressType::class)
OriginalL'auteur jkucharovic