Salut,
Je débute un nouveau projet avec Symfony 2.0 RC10 et j'ai du mal à comprendre les formulaires et à trouver des exemples.
Dans les versions précédentes, je trouvais appréciable de pouvoir générer beaucoup de choses automatiquement. Là, j'ai pu générer mes entités à partir des fichiers de mapping tirés de ma base de données mais je crois qu'il n'est plus possible de générer automatiquement les formulaires et leurs validateurs.
Est-ce que c'est vrai ? Est-ce que c'est définitif ?
Ce n'est pas dramatique, je peux le faire à la main mais il me faudrait au moins un exemple complet avec l'entité, le formulaire, le contrôleur, la validation et la vue HTML.
entity Client :
formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 namespace Autoecole\DataBundle\Entity; /** * Autoecole\DataBundle\Entity\Client */ class Client { /** * @var integer $cliId */ private $cliId; /** * @var string $cliNom */ private $cliNom; /** * Get cliId * * @return integer $cliId */ public function getCliId() { return $this->cliId; } /** * Set cliNom * * @param string $cliNom */ public function setCliNom($cliNom) { $this->cliNom = $cliNom; } /** * Get cliNom * * @return string $cliNom */ public function getCliNom() { return $this->cliNom; }
contrôleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 namespace Autoecole\ClientBundle; use Symfony\Component\Form\Form; use Symfony\Component\Form\TextField; use Symfony\Component\Form\TextareaField; use Symfony\Component\Form\CheckboxField; use Symfony\Component\Form\HiddenField; class ClientForm extends Form { protected function configure() { $this->setDataClass( "Autoecole\\DataBundle\\Entity\Client" ); //$this->add( "cliId" ); $this->add( "cliNom" );
J'ai vu dans la documentation qu'il faut utiliser un "form context" (contactRequest dans l'exemple) qui contient les propriétés du formulaire et les contraintes d'intégrité en annotation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 namespace Autoecole\ClientBundle\Controller; use Autoecole\ClientBundle\ClientForm; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Autoecole\DataBundle\Entity\Client; class DefaultController extends Controller { /** * Liste des clients */ public function indexAction() { return $this->render('AutoecoleClientBundle:Default:search.html.twig'); } /** * Préparation et traitement du formulaire de saisie (ajout ou modification) d'un client */ public function newAction() { //créer un nouveau client vide $client = new Client(); //créer le formulaire $form = ClientForm::create( $this->get('form.context'), 'client' ); // If a POST request, write the submitted data into $client // and validate the object $form->bind( $this->get('request'), $client ); // If the form has been submitted and is valid... if ( $form->isValid() ) { //récupérer le entityManager $em = $this->get( 'doctrine.orm.entity_manager' ); $em->persist( $client ); $em->flush(); //afficher le client saisi return $this->render( 'AutoecoleClientBundle:Default:view.html.twig' ); } // Display the form with the values in $contactRequest return $this->render('AutoecoleClientBundle:Default:edit.html.twig', array( 'form' => $form )); }
Mais est-ce que je suis obligé d'utiliser un objet particulier pour ça ou est-ce que je peux utiliser ma classe Client ? J'ai essayé
$this->setDataClass( "Autoecole\\DataBundle\\Entity\Client" );
et ça passe mais je dois définir les validateurs à la main alors que les contraintes sont déjà décrites dans le fichier de mapping ? Parce que là, au submit j'ai "SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'Cli_Nom' cannot be null ".
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Autoecole\DataBundle\Entity\Client: type: entity table: Client fields: cliId: id: true type: integer unsigned: false nullable: false column: Cli_ID generator: strategy: IDENTITY cliNom: type: string length: 150 fixed: false nullable: false column: Cli_Nom
Partager