Outils pour utilisateurs

Outils du site


symfony4:formulaires_formulaire_avec_classe

Ceci est une ancienne révision du document !


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)
            // ...
            // ...
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Article::class,
        ]);
    }
}

Utilisation dans un 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(),
        ]);
    }
}

Intégration dans un template

Forme simple sans aucun contrôle sur le rendu :

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

Avec un bouton inséré à la fin:

templates/article/edit.html.twig
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" class="btn btn-primary">Enregistrer</button>
{{ form_end(form) }}

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

templates/article/edit.html.twig
{{ form_start(form) }}
{{ form_widget(form.denom) }}
{{ form_widget(form.desc) }}
{{ form_widget(form.couleur) }}
<button type="submit" class="btn btn-primary">Enregistrer</button>
{{ form_end(form) }}
symfony4/formulaires_formulaire_avec_classe.1586074367.txt.gz · Dernière modification: 2020/04/05 08:12 (modification externe)