Outils pour utilisateurs

Outils du site


symfony_4:fonctionnement:les_formulaires_gestion_des_formulaires

Ceci est une ancienne révision du document !


Gestion des formulaires

Symfony permet d'utiliser une mécanique nommé FormType, elle permet de créer un formulaire qui pourra être utilisé par plusieurs méthode cela permet d'utiliser le même formulaire par plusieurs méthode par exemple “add” et “edit” d'une entité.

Entête

Tout d'abord vous devez créé le fichier vous devez ajouter le namespace et les “use” comme celui de votre entité et des différents types de champs que vous allez utiliser (certain IDE les ajoutes automatiquement).

<?php
// /src/Form/TestType.php
namespace App\Form;
 
use App\Entity\Test;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
 
class TestType extends AbstractType
{

Fonction principal : création du formulaire

Viens ensuite la fonction principale qui construit le formulaire vous pouvez ajouté des champs en fonction du nom des attribut de l'entité, et des attribut dans la section attr

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, array(
                'attr' => array('maxlength' => 190)
            ))
 
            ...
      }

Les types de champs

Liste déroulante : ChoiceType

Les choiceType, qui sont des listes déroulantes se créer de la manière suivante : Pour information, il est possible de donner un tableau php ou une collection d'objet en paramètre.

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
 
    ...
 
     ->add('type', ChoiceType::class, array(
          'choices'  => array(
               'Style (CSS)' => "CSS",
               'JavaScript' => "JS",
               'Image' => "IMG",
           ),
      ))

Booléen : CheckboxType

Une checkbox défini avec l'element en “optionnel” et le label affiché “Inclure ce fichier ?” : Attention, required à “true” sera principalement utilisé pour ce type lors de demande de validation vitale (condition d'utilisation par exemple) car il implique la coche obligatoire.

            ->add('active', CheckboxType::class, array(
                'label'    => 'Inclure ce fichier ?',
                'required' => false,
            ))

Bouton de soumission du formulaire

            ->add('save', SubmitType::class, array(
                'label' => 'Ajouter'
            ));
    }

Fonction qui permet de configuration le formulaire par defaut on ajoute la classe à la quel fais référence le formulaire

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => Test::class,
        ));
    }
}

Exemple complet

<?php
// /src/Form/SWFileType.php
namespace App\Form;
 
use App\Entity\SWFile;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
 
class SWFileType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, array(
                'attr' => array('maxlength' => 190)
            ))
            ->add('type', ChoiceType::class, array(
                'choices'  => array(
                    'Style (CSS)' => "CSS",
                    'JavaScript' => "JS",
                    'Image' => "IMG",
                ),
            ))
            ->add('src', TextType::class, array(
                'attr' => array('maxlength' => 190)
            ))
            ->add('active', CheckboxType::class, array(
                'label'    => 'Inclure ce fichier ?',
                'required' => false,
            ))
            ->add('save', SubmitType::class, array(
                'label' => 'Ajouter'
            ))
        ;
    }
 
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => SWFile::class,
        ));
    }
}
symfony_4/fonctionnement/les_formulaires_gestion_des_formulaires.1540279380.txt.gz · Dernière modification: 2019/12/08 08:43 (modification externe)