L3 Info : PHP et Applications Web
 
◃  Ch. 13 Symfony 7.4  ▹
 

Les formulaires

  • FormType
    • Symfony met à disposition un type formulaire (FormType) qui fusionne la notion de formulaire, de champs de formulaire ou encore de groupes de champs de formulaire.
    • La hiérarchie des FormType suit le schéma suivant :
      FormType   (la racine, mère de tous les types)
      ├─ TextType    (text input)
      │  ├─ EmailType
      │  ├─ PasswordType
      │  ├─ ...
      │  └─ UrlType
      ├─ ChoiceType  (select, radio, checkboxes)
      │  ├─ CountryType
      │  ├─ EntityType
      │  └─ ...
      ├─ DateType    (champs simples ou multiples pour les données temporelles)
      │  └─ ...
      └─ ...
    • Pour plus de détails
  • Formulaire et contrôleur
    • la méthode createFormBuilder() permet de générer un formulaire.
      $auteur = new Auteur();
      $form = $this->createFormBuilder($auteur)
      ->add('aut_nom', TextType::class)
      ->add('prenom', TextType::class, ['property_path' => 'aut_prenom'])
      ->add('save', SubmitType::class, ['label' => 'Enregistrer'])
      ->getForm(); 
  • Affichage du formulaire
    • Transmission du formulaire produit au template
      $this->render('auteur/newAuteur.html.twig', ['form' => $form, ]);
    • Dans le template : {{ form(form) }}
  • Traitement du formulaire dans le même contrôleur
    • passage d'une instance de Symfony\Component\HttpFoundation\Request en paramètre
      $form->handleRequest($request);
      if ($form->isSubmitted() && $form->isValid()) {
      // si des données ont été soumises et sont valides
      $auteur = $form->getData();
      // traitement de l'action (sauvegarde dans la BD, ...)
      return $this->redirectToRoute('auteurById', ['id' => $auteur->getId()]);
      }
      return $this->render('auteur/newAuteur.html.twig', ['form' => $form, ]);
  • Validation de formulaire :

    • Symfony permet d'ajouter des règles de validation des données saisies dans les formulaires
    • Via des annotations dans les Entités (compatible avec les annotations de Doctrine) :

      namespace App\Entity;
      
      use Symfony\Component\Validator\Constraints as Assert;
      
      class Auteur
      {
        #[Assert\NotBlank]
        public string $aut_nom;
      
        #[Assert\NotBlank]    
        public string aut_prenom;
      }
    • Méthode alternative avec des contraintes définies lors de la construction du formulaire