Outils pour utilisateurs

Outils du site


symfony4:formulaires_formulaire_avec_classe

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.

ArticleType.php
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 :

ArticleController.php
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 :

ArticleController.php
        // ...
 
        $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 :

templates/article/edit.html.twig
{{ form(form) }}

En spécifiant chaque champ (permet d'appliquer des options à chacun):

templates/article/edit.html.twig
{{ form_start(form) }}
 
{{ form_row(form.denom) }}
{{ form_row(form.desc) }}
{{ form_row(form.couleur) }}
 
{{ form_widget(form.save) }}
 
{{ form_end(form) }}
symfony4/formulaires_formulaire_avec_classe.txt · Dernière modification: 2020/04/11 22:06 par marclebrun