<< TP 9
TP 11 >>

10. Lister, Supprimer un Equipement





10.1. L'entité Equipement

  1. <?php
  2. namespace App\Entity;
  3.  
  4. use Doctrine\ORM\Mapping as ORM;
  5. use Doctrine\Common\Collections\ArrayCollection;
  6. use Doctrine\Common\Collections\Collection;
  7.  
  8. use App\Repository\EquipementRepository;
  9. use App\Entity\EquipementVehicule;
  10.  
  11.  
  12. #[ORM\Entity(repositoryClass: EquipementRepository::class)]
  13. class Equipement
  14. {
  15.     // --------------------------------------------------------------
  16.     // Description des champs
  17.     // --------------------------------------------------------------
  18.  
  19.     #[ORM\Id]
  20.    #[ORM\GeneratedValue]
  21.    #[ORM\Column(type: 'integer')]
  22.    private ?int $eq_id = null;
  23.  
  24.     #[ORM\Column(type:'string', length:30)]
  25.    private ?string $eq_libelle = null;
  26.  
  27.     #[ORM\Column(type:'float')]
  28.    private ?float $eq_prix = null;
  29.  
  30.     // --------------------------------------------------------------
  31.     // Methodes
  32.     // --------------------------------------------------------------
  33.  
  34.     public function __construct()
  35.     {
  36.        
  37.     }
  38.  
  39.     function getEqId() {
  40.  
  41.         return $this->eq_id;
  42.  
  43.     }
  44.  
  45.     function getEqLibelle() {
  46.  
  47.         return $this->eq_libelle;
  48.  
  49.     }
  50.  
  51.     function setEqLibelle($libelle) {
  52.  
  53.         $this->eq_libelle = $libelle;
  54.    
  55.         return $this;
  56.    
  57.     }
  58.  
  59.     function getEqPrix() {
  60.  
  61.         return $this->eq_prix;
  62.  
  63.     }
  64.  
  65.     function setEqPrix($prix) {
  66.  
  67.         $this->eq_prix = $prix;
  68.    
  69.         return $this;
  70.    
  71.     }
  72.  
  73. }
  74.  
  75. ?>

10.2. Contrôleur pour l'entité Equipement

Comme précédemment pour les autres entités, on dispose du même type de route :

  1. <?php
  2. // src/Controller/EquipementController.php
  3. namespace App\Controller;
  4.  
  5. use App\Entity\Equipement;
  6. use App\Form\EquipementType;
  7. use App\Repository\EquipementRepository;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Doctrine\ORM\EntityManagerInterface;
  13.  
  14. // Utilisation d'un logger pour le débogage
  15. use Psr\Log\LoggerInterface;
  16.  
  17. class EquipementController extends AbstractController
  18. {
  19.  
  20.     // Logger
  21.     private $logger;
  22.     private $entity_manager;
  23.     private $repository;
  24.    
  25.     /**
  26.      * Constructeur
  27.      */
  28.     public function __construct(LoggerInterface $logger,
  29.         EntityManagerInterface $entity_manager)
  30.     {
  31.         $this->logger = $logger;
  32.         $this->entity_manager = $entity_manager;
  33.         // obtenir le Repository lié au conducteur depuis l'EntityManager
  34.         $this->repository = $entity_manager->getRepository(Equipement::class);
  35.     }
  36.    
  37. }
  38.  
  39. ?>

10.3. Repository pour l'entité Equipement

On donne deux fonctionalités au repository lié à l'équipement :

  1. <?php
  2. namespace App\Repository;
  3.  
  4. use App\Entity\Equipement;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\Persistence\ManagerRegistry;
  7.  
  8. /**
  9.  * @extends ServiceEntityRepository<Equipement>
  10.  */
  11. class EquipementRepository extends ServiceEntityRepository
  12. {
  13.     public function __construct(ManagerRegistry $registry)
  14.     {
  15.         parent::__construct($registry, Equipement::class);
  16.     }
  17.  
  18.     public function save(Equipement $equipement, bool $flush = false): void
  19.     {
  20.         $this->getEntityManager()->persist($equipement);
  21.  
  22.         if ($flush) {
  23.             $this->getEntityManager()->flush();
  24.         }
  25.     }
  26.  
  27.     /**
  28.      * @return Equipement[] Returns an array of Equipement objects
  29.      * ordered by their label ($eq_Libelle)
  30.      */
  31.     public function findAllOrderedByName()
  32.     {
  33.         $r = $this->createQueryBuilder('c')
  34.             ->orderBy('c.eq_libelle', 'ASC')
  35.             ->getQuery()
  36.             ->getResult();
  37.         return $r;
  38.     }
  39. }
  40.  
  41. ?>

10.4. Lister les équipements

Pour lister les véhicules il faut ajouter la fonction adéquate au niveau du contrôleur :

  1. <?php
  2. // ...
  3.  
  4. class VehiculeController extends AbstractController
  5. {
  6.     #[Route('/vehicule/lister', name: 'vehicule_lister')]
  7.    public function lister(Request $request): Response
  8.     {
  9.         $liste_vehicules = $vehicule_repository->findAllOrdered();
  10.  
  11.         return $this->render("vehicule/lister.html.twig", [
  12.             'liste_vehicules' => $liste_vehicules
  13.         ]);
  14.     }
  15.  
  16. }
  17.  

On réalise une énumération des véhicules (bloucle for) avec la variable e (pour élément) et on affichera :

  1. {% extends 'base.html.twig' %}
  2.  
  3. {% block main %}
  4.     <section>
  5.  
  6.     <h2>Véhicules</h2>
  7.  
  8.     <nav>
  9.         <ul>
  10.             <li><a href="/vehicule/creer">[+] Ajouter</a></li>
  11.             <li><a href="/vehicule/tout_supprimer">[x] Tout Supprimer</a></li>
  12.         </ul>
  13.     </nav>
  14.  
  15.     {% if vehicules_list is empty %}
  16.  
  17.         <p>Aucun véhicule trouvé.</p>
  18.  
  19.     {% else %}
  20.  
  21.     <table>
  22.         <tr>
  23.             <th style="width: 50px">Id</th>
  24.             <th style="width: 150px">Marque</th>
  25.             <th style="width: 150px">Modèle</th>
  26.             <th style="width: 150px">Conducteur</th>
  27.             <th style="width: 50px">Suppr.</th>
  28.             <th style="width: 50px">Mod.</th>
  29.            
  30.         </tr>
  31.         {% for e in vehicules_list %}
  32.             <tr>
  33.                
  34.                 <td class="center">{{ e.VeId }}</td>
  35.                 <td> {{ e.VeMarque }}</td>
  36.                 <td> {{ e.VeModele }}</td>
  37.                 <td> {{ e.VeConducteur.CoNom }}</td>
  38.                 <td class="center"><img src="{{ asset('images/delete.png') }}" alt="delete"
  39.                     onclick="return vehicule_supprimer({{ e.VeId }}, '{{ e.VeMarque }}', '{{ e.VeModele }}');" /></td>
  40.                 <td class="center"><img src="{{ asset('images/modify.png') }}" alt="modify"
  41.                     onclick="return vehicule_modifier({{ e.VeId }}, '{{ e.VeMarque }}', '{{ e.VeModele }}');" /></td>
  42.                
  43.             </tr>
  44.         {% endfor %}
  45.     </table>
  46.  
  47.     {% endif %}
  48.  
  49.     </section>
  50. {% endblock %}

10.5. Supprimer

Pour supprimer un véhicule il faut ajouter une fonction au niveau du contrôleur ainsi que la fonctionnalité permettant de supprimer tous les véhicules :

  1. <?php
  2. // ...
  3.  
  4. class VehiculeController extends AbstractController
  5. {
  6.     // ...
  7.  
  8.     /**
  9.      * Supprimer un véhicule étant donné son id
  10.      */
  11.     #[Route('/vehicule/supprimer/{id}', name: 'vehicule_supprimer')]
  12.    public function supprimer( $id ): Response
  13.     {
  14.         // Récupérer le vehicule par son id
  15.         $vehicule = $this->repository->find($id);
  16.  
  17.         if (!$vehicule) {
  18.             throw $this->createNotFoundException('Aucun véhicule avec l\'identifiant ' . $id . ' n\'a été trouvé');
  19.         }
  20.  
  21.         // Suppression du vehicule
  22.         $this->entity_manager->remove($vehicule);
  23.         $this->entity_manager->flush();
  24.  
  25.         return $this->redirectToRoute('vehicule_lister');
  26.     }
  27.  
  28.     /**
  29.      * Supprimer tous les véhicules (debug/test)
  30.      */
  31.     #[Route('/vehicule/supprimer_tout', name: 'vehicule_supprimer_tout')]
  32.    public function supprimer_tout(): Response
  33.     {
  34.         // Récupérer les vehicules
  35.         $vehicules = $this->repository->findAll();
  36.  
  37.         foreach($vehicules as $vehicule) {
  38.             $this->entity_manager->remove($vehicule);
  39.         }
  40.        
  41.         $this->entity_manager->flush();
  42.  
  43.         return $this->redirectToRoute('vehicule_lister');
  44.     }
  45.  
  46.     // ...
  47. }
  48. ?>

On notera que le véhicule est supprimé mais pas son conducteur.






<< TP 9
TP 11 >>