<< TP 8
TP 10 >>

9. Ajouter, Modifier un Véhicule





9.1. Ajouter un véhicule

Dans le cas de l'ajout d'un véhicule, il faut penser qu'un conducteur doit être associé au véhicule.

  1. <?php
  2. //...
  3.  
  4. class VehiculeController extends AbstractController
  5. {
  6.     // ...
  7.  
  8.     /**
  9.      * Ajout d'un nouveau véhicule
  10.      */
  11.     #[Route('/vehicule/ajouter', name: 'vehicule_ajouter')]
  12.    public function ajouter(Request $request): Response
  13.     {
  14.         $vehicule = new Vehicule();
  15.         $form = $this->createForm(VehiculeType::class, $vehicule);
  16.  
  17.         $form->handleRequest($request);
  18.  
  19.         if ($form->isSubmitted() && $form->isValid()) {
  20.             $this->repository->save($vehicule, true);
  21.  
  22.             return $this->redirectToRoute('vehicule_lister');
  23.         }
  24.  
  25.         return $this->render('vehicule/ajouter.html.twig', [
  26.             'form' => $form->createView(),
  27.         ]);
  28.     }
  29.  
  30. }
  31. ?>

On crée le fichier src/Form/VehiculeType.php.

  1. <?php
  2. namespace App\Form;
  3.  
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\FormBuilderInterface;
  6. use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
  7. use Symfony\Component\Form\Extension\Core\Type\DateType;
  8. use Symfony\Component\Form\Extension\Core\Type\TextType;
  9. use Symfony\Component\OptionsResolver\OptionsResolver;
  10.  
  11. use App\Entity\Vehicule;
  12. use App\Entity\Conducteur;
  13. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  14.  
  15. class VehiculeType extends AbstractType
  16. {
  17.    
  18.     public function buildForm(FormBuilderInterface $builder, array $options)
  19.     {
  20.         $builder
  21.             ->add('ve_marque', TextType::class, [
  22.                 'label' => 'Marque',
  23.                 'required' => true,
  24.             ])->add('ve_modele', TextType::class, [
  25.                 'label' => 'Modèle',
  26.                 'required' => true,
  27.             ])->add('ve_conducteur', EntityType::class, [
  28.                 'class' => Conducteur::class,
  29.                 'choice_label' => 'CoNom',
  30.                 'label' => 'Conducteur'
  31.             ])->add('ve_date', DateType::class, [
  32.                 'label' => 'Date d\'acquisition',
  33.                 'widget' => 'single_text',
  34.                 // prevents rendering it as type="date", to avoid HTML5 date pickers
  35.                 'html5' => true,
  36.                 //'help' => 'Utiliser jj-mm-aaaa',
  37.                 //'data'   => new \DateTime()
  38.             ]);
  39.     }
  40.  
  41.     public function configureOptions(OptionsResolver $resolver)
  42.     {
  43.         $resolver->setDefaults([
  44.             'data_class' => Vehicule::class
  45.         ]);
  46.     }
  47. }
  48. ?>
  49.  

Enfin, il faut générer le template TWIG lié à l'ajout d'un véhicule.

  1. {# templates/vehicule/ajouter.html.twig #}
  2.  
  3. {% extends 'base.html.twig' %}
  4.  
  5. {% block css %}
  6.     {{ parent() }}
  7.     <style>
  8.     div#vehicule_ve_date_help {
  9.         margin-left: 150px;
  10.         background: lightgray;
  11.     }
  12.     </style>
  13. {% endblock %}
  14.  
  15. {% block main %}
  16.     <section>
  17.  
  18.     <h2>Ajout d'un véhicule</h2>
  19.  
  20.     {{ form_start(form) }}
  21.         {{ form_start(form) }}
  22.         {{ form_widget(form) }}
  23.         <button type="submit">Ajouter</button>
  24.     {{ form_end(form) }}
  25.    
  26.  
  27. {% endblock %}
  28.  

9.2. Modifier un véhicule

  1. <?php
  2. // ...
  3.  
  4. class VehiculeController extends AbstractController
  5. {
  6.     // ...
  7.  
  8.     /**
  9.      * Modifier un véhicule étant donné son id
  10.      */
  11.     #[Route('/vehicule/modifier/{id}', name: 'vehicule_modifier')]
  12.    public function modifier(Request $request, int $id): Response
  13.     {
  14.  
  15.         $vehicule = $this->repository->find($id);
  16.        
  17.        
  18.         if (!$vehicule) {
  19.             throw $this->createNotFoundException('Aucun véhicule avec l\'identifiant ' . $id . ' n\'a été trouvé');
  20.         }
  21.  
  22.         $form = $this->createForm(VehiculeType::class, $vehicule);
  23.  
  24.         $form->handleRequest($request);
  25.  
  26.         if ($form->isSubmitted() && $form->isValid()) {
  27.            
  28.             $this->repository->save($vehicule, true);
  29.  
  30.             return $this->redirectToRoute('vehicule_lister');
  31.         }
  32.  
  33.         return $this->render('vehicule/modifier.html.twig', [
  34.             'form' => $form->createView(),
  35.         ]);
  36.  
  37.     }
  38.  
  39. }
  40. ?>
  1. {# templates/vehicule/modifier.html.twig #}
  2.  
  3. {% extends 'base.html.twig' %}
  4.  
  5. {% block css %}
  6.     {{ parent() }}
  7.     <style>
  8.     div#vehicule_ve_date_help {
  9.         margin-left: 150px;
  10.         background: lightgray;
  11.     }
  12.     </style>
  13. {% endblock %}
  14.  
  15. {% block main %}
  16.     <section>
  17.  
  18.     <h2>Modification d'un véhicule</h2>
  19.  
  20.     {{ form_start(form) }}
  21.         {{ form_start(form) }}
  22.         {{ form_widget(form) }}
  23.         <button type="submit">Enregistrer</button>
  24.     {{ form_end(form) }}
  25.    
  26.  
  27. {% endblock %}
  28.  





<< TP 8
TP 10 >>