Aller au contenu principal

Construction du formulaire

Le premier exemple que nous prenons concerne la création d'une newsletter.

Le but est de pouvoir présenter un formulaire simple, contenant un seul champ email, et permettant d'enregistrer une adresse dans une table Newsletter.

Pré-requis

On va donc prendre soin de créer en premier lieu l'entité chargée de recevoir ces données, puis de mettre à jour le schéma de la base de données comme vu précédemment

Pour créer un formulaire dans notre projet, on peut utiliser le MakerBundle :

php bin/console make:form
Entité

On peut lier notre formulaire à une entité ou non, le maker nous demande si on souhaite le faire. Dans notre exemple, c'est le cas, il s'agit de l'entité Newsletter

Le maker nous génère une classe dans le dossier src/Form. On constate donc que nos classes de formulaires seront bien séparées du reste du code, dans un namespace App\Form.

remarque

On suffixe les noms des classes de formulaire par Type, car dans Symfony tout est ce qu'on appelle un "form type" : les formulaires, les champs, etc...c'est plus pratique pour composer et intégrer des formulaires

Dans cette classe, on retrouve une méthode essentielle : buildForm. C'est dans cette méthode que nous allons déclarer les différents champs de notre formulaire, et leurs propriétés :

//...
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
//...

class NewsletterType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('email', EmailType::class)
->add("S'inscrire", SubmitType::class)
;
}
// ...configureOptions, liaison du formulaire à la classe d'entité
}

On peut noter plusieurs choses dans la méthode buildForm :

  • On peut utiliser l'interface fluide du type FormBuilderInterface pour chaîner les appels à la méthode add
  • Chaque champ déclaré possède un Type lui-même : EmailType, SubmitType dans ce cas
  • Les classes EmailType, SubmitType sont bien issues du composant Form de Symfony, il faut veiller à use les classes du bon namespace
  • On constate que par défaut, un formulaire ne va pas générer lui-même un bouton de soumission. C'est à nous, à la construction du formulaire, d'ajouter un champ de type SubmitType
remarque

Les classes ***Type appliquées aux différents champs de notre formulaire vont permettre d'afficher correctement les champs dans le rendu Twig !