====== Formulaire défini dans une classe ====== ===== Création de la classe de formulaire ===== php bin/console make:form The name of the form class : > ArticleType Donner à la classe un nom qui se termine par **Type** (par exemple **ArticleType** pour éditer des entités de type **Article**). The name of Entity or fully qualified model class name that the new form will be bound to (empty for none): > App\Entity\Article Donner le nom de l'entité si le formulaire est lié à une entité, sinon laisser vide. use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\TextareaType; class ArticleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('denom', TextType::class, [ 'label' => "Dénomination de l'article", ]) ->add('desc', TextareaType::class, [ 'label' => "Descriptif", ]) ->add('couleur', TextType::class) // ... // ... ->add('save', SubmitType::class, [ 'label' => "Enregistrer", 'attr' => [ 'class' => 'btn btn-primary' ] ]) ; } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'data_class' => Article::class, ]); } } ===== Utilisation dans un contrôleur ===== Utiliser la méthode **createForm** du contrôleur : class ArticleController extends AbstractController { public function new() { $article = new Article(); // ... $form = $this->createForm(ArticleType::class, $article); return $this->render('article/edit.html.twig', [ 'form' => $form->createView(), ]); } } L'ajout d'options permet de redéfinir l'action et la méthode : // ... $form = $this->createForm(ArticleType::class, $article, [ 'action' => $this->generateUrl('target_route'), 'method' => 'GET' ]); // ... ===== Intégration dans un template ===== Forme simple sans aucun contrôle sur le rendu : {{ form(form) }} En spécifiant chaque champ (permet d'appliquer des options à chacun): {{ form_start(form) }} {{ form_row(form.denom) }} {{ form_row(form.desc) }} {{ form_row(form.couleur) }} {{ form_widget(form.save) }} {{ form_end(form) }}