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.
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
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.
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
FormBuilderInterfacepour chaîner les appels à la méthodeadd - Chaque champ déclaré possède un
Typelui-même :EmailType,SubmitTypedans ce cas - Les classes
EmailType,SubmitTypesont bien issues du composantFormde Symfony, il faut veiller àuseles 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
Les classes ***Type appliquées aux différents champs de notre formulaire vont permettre d'afficher correctement les champs dans le rendu Twig !