Outils pour utilisateurs

Outils du site


symfony3:formulaires

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
symfony3:formulaires [2019/06/22 06:48]
marclebrun [Formulaire basé sur n'importe quelle classe]
— (Version actuelle)
Ligne 1: Ligne 1:
-====== Formulaires ====== 
- 
-===== Formulaire basé sur une entité Doctrine ===== 
- 
-Pour une entité nommée **MonEntite** dans un bundle nommé **ML/​MonBundle** : 
- 
-<code bash> 
-bin/console doctrine:​generate:​form MLMonBundle:​MonEntite 
-</​code>​ 
- 
-Cette commande crée une classe **MonEntiteType** définie dans le fichier **src/​ML/​MonBundle/​Form/​MonEntiteType.php** 
- 
-Il est conseillé d'​ajouter les types et les options à chaque champ de formulaire ajouté dans cette classe, ainsi que retirer les champs en trop et ajouter les champs manquants (bouton submit, …). 
- 
-Pour créer un formulaire à partir de cette classe dans le code d'un formulaire: 
- 
-<code php> 
-namespace ML\MonBundle\Controller;​ 
- 
-use Symfony\Bundle\FrameworkBundle\Controller\Controller;​ 
-use Symfony\Component\HttpFoundation\Request;​ 
-use ML\MonBundle\Entity\MonEntite;​ 
-use ML\MonBundle\Form\MonEntiteType;​ 
- 
-class MonController extends Controller { 
-    public function addAction(Request $request) { 
-        $monEntite = new MonEntite; 
-        $form = $this->​get('​form.factory'​) 
-            ->​create(MonEntiteType::​class,​ $monEntite);​ 
- 
-        if($request->​isMethod('​POST'​) 
-        && $form->​handleRequest($request)->​isValid()) { 
-            $em = $this->​getDoctrine()->​getManager();​ 
-            $em->​persist($advert);​ 
-            $em->​flush();​ 
- 
-            $request->​getSession()->​getFlashBag()->​add('​notice',​ 
-                '​Données enregistrées.'​);​ 
- 
-            return $this->​redirectToRoute('​ml_monbundle_view',​ 
-                ['​id'​ => $monEntite->​getId()]);​ 
-        } 
- 
-        return $this->​render('​MLMonBundle:​MonController:​add.html.twig',​ [ 
-            '​form'​ => $form->​createView(),​ 
-        ]); 
-    } 
-} 
-</​code>​ 
- 
-La ligne de création du formulaire (avec '​form.factory'​) peut être raccourcie : 
- 
-<code php> 
-$form = $this->​createForm(MonEntiteType::​class,​ $monEntite);​ 
-</​code>​ 
- 
-===== Formulaire basé sur n'​importe quelle classe ===== 
- 
-Exemple dans avec une classe **Personne** : 
- 
-<code php> 
-use Symfony\Component\Form\Extension\Core\Type\FormType;​ 
-use Symfony\Component\Form\Extension\Core\Type\TextType;​ 
-use Symfony\Component\Form\Extension\Core\Type\SubmitType;​ 
- 
-use MonBundle\MesClasses\Personne;​ 
- 
-public function indexAction() { 
-    $personne = new Personne(); 
- 
-    $formBuilder = $this->​get('​form.factory'​) 
-        ->​createBuilder(FormType::​class,​ $personne); 
-    $formBuilder 
-        ->​add('​nom', ​        ​TextType::​class) 
-        ->​add('​prenom', ​     TextType::​class) 
-        ->​add('​enregistrer',​ SubmitType::​class);​ 
-    $form = $formBuilder->​getForm();​ 
-        ​ 
-    return $this->​render('​MonBundle:​Personnes:​index.html.twig',​ [ 
-        '​form'​ => $form->​createView(),​ 
-    ]); 
-} 
-</code 
- 
-===== Rendu des formulaires avec TWIG ===== 
- 
-Lors de l'​appel de **$this->​render** dans le contrôleur,​ on passe le formulaire sous forme de variable nommée **'​form'​**. C'est sous ce nom que l'on va y faire référence dans le template. 
- 
-Sous sa forme la plus simple, le formulaire est rendu de cette façon : 
- 
-<code twig> 
-{{ form(form) }} 
-</​code>​ 
- 
-Mais on ne contrôle absolument pas la façon dont l'​affichage est fait. Pour maîtriser comment chaque partie du formulaire sera rendue, il faut l'​éclater en ses différentes parties dans notre template. Par exemple, en utilisation la librairie CSS Bootstrap: 
- 
-<code twig> 
-<div class="​well">​ 
-  {{ form_start(form,​ {'​attr':​ {'​class':​ '​form-horizontal'​}}) }} 
-  {{ form_errors(form) }} 
-    ​ 
-  <div class="​form-group">​ 
-    {{ form_errors(form.nom) }} 
-    <div class="​col-sm-8">​ 
-      {{ form_widget(form.nom,​ {'​attr':​ {'​class':​ '​form-control'​}}) }} 
-    </​div>​ 
-  </​div>​ 
-    ​ 
-  <div class="​form-group">​ 
-    <div class="​col-sm-8">​ 
-      {{ form_widget(form.enregistrer,​ {'​attr':​ {'​class':​ 'btn btn-primary'​}}) }} 
-    </​div>​ 
-  </​div>​ 
- 
-  {{ form_rest(form) }} 
-  {{ form_end(form) }} 
-</​div>​ 
-</​code>​ 
- 
-===== Note sur l'​intégration de Bootstrap ===== 
- 
-Dans **app/​config/​config.yml** il faut ajouter une ligne dans la section **twig** : 
- 
-<code yaml> 
-# Twig Configuration 
-twig: 
-    ... 
-    form_themes:​ 
-        - '​bootstrap_3_layout.html.twig'​ 
-</​code>​ 
- 
-Le template **bootstrap_3_layout.html.twig** est inclus dans Symfony et définit le rendu d'un formulaire adapté à la librairie CSS Bootstrap 3. 
  
symfony3/formulaires.1561186109.txt.gz · Dernière modification: 2019/06/22 06:48 (modification externe)