Ceci est une ancienne révision du document !
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é.
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 {
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 principaux types de champs :
La liste complète des types de champs est présente sur la documentation de Symfony : Liste des types
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", ), ))
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.
use Symfony\Component\Form\Extension\Core\Type\CheckboxType; ... ->add('active', CheckboxType::class, array( 'label' => 'Inclure ce fichier ?', 'required' => false, ))
Bouton de soumission du formulaire
use Symfony\Component\Form\Extension\Core\Type\SubmitType; ->add('save', SubmitType::class, array( 'label' => 'Ajouter' ));
Fonction qui permet d'indiquer à symfony la classe à relié au formulaire.
use App\Entity\Test; ... public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => Test::class, )); } }
<?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, )); } }