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 update et create 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érent type
<?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) )) ... }
Viens ensuite les choiceType, qui sont des listes déroulantes
->add('type', ChoiceType::class, array( 'choices' => array( 'Style (CSS)' => "CSS", 'JavaScript' => "JS", 'Image' => "IMG", ), )) ->add('src', TextType::class, array( 'attr' => array('maxlength' => 190) ))
Voilà maintenant une checkbox avec si l'element est requis
->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, )); } }
<?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, )); } }