10. Lister, Supprimer un Equipement
10.1. L'entité Equipement
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use App\Repository\EquipementRepository;
use App\Entity\EquipementVehicule;
#[ORM\Entity(repositoryClass: EquipementRepository::class)]
class Equipement
{
// --------------------------------------------------------------
// Description des champs
// --------------------------------------------------------------
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private ?int $eq_id = null;
#[ORM\Column(type:'string', length:30)]
private ?string $eq_libelle = null;
#[ORM\Column(type:'float')]
private ?float $eq_prix = null;
// --------------------------------------------------------------
// Methodes
// --------------------------------------------------------------
public function __construct()
{
}
function getEqId() {
return $this->eq_id;
}
function getEqLibelle() {
return $this->eq_libelle;
}
function setEqLibelle($libelle) {
$this->eq_libelle = $libelle;
return $this;
}
function getEqPrix() {
return $this->eq_prix;
}
function setEqPrix($prix) {
$this->eq_prix = $prix;
return $this;
}
}
?>
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 :
- /equipement/ajouter qui permet d'ajouter un nouvel équipement
- /equipement/modifier/{id} qui permet de modifier un équipement en fonction de son identifiant
- /equipement/supprimer/{id} qui permet de supprimer un équipement en fonction de son identifiant
- /equipement/supprimer_tout qui permet de supprimer tous les équipements (debug/test)
- /equipement/lister qui permet de retourner la liste de tous les équipements
<?php
// src/Controller/EquipementController.php
namespace App\Controller;
use App\Entity\Equipement;
use App\Form\EquipementType;
use App\Repository\EquipementRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
// Utilisation d'un logger pour le débogage
use Psr\
Log\LoggerInterface
;
class EquipementController extends AbstractController
{
// Logger
private $logger;
private $entity_manager;
private $repository;
/**
* Constructeur
*/
public function __construct(LoggerInterface $logger,
EntityManagerInterface $entity_manager)
{
$this->logger = $logger;
$this->entity_manager = $entity_manager;
// obtenir le Repository lié au conducteur depuis l'EntityManager
$this->repository = $entity_manager->getRepository(Equipement::class);
}
}
?>
10.3. Repository pour l'entité Equipement
On donne deux fonctionalités au repository lié à l'équipement :
- sauvegarder une entité dans le cas d'un ajout ou d'une modification
- obtenir la liste des équipements stockés dans la base de données, classés par marque puis par modèle
<?php
namespace App\Repository;
use App\Entity\Equipement;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Equipement>
*/
class EquipementRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Equipement::class);
}
public function save(Equipement $equipement, bool $flush = false): void
{
$this->getEntityManager()->persist($equipement);
if ($flush) {
$this->getEntityManager()->flush();
}
}
/**
* @return Equipement[] Returns an array of Equipement objects
* ordered by their label ($eq_Libelle)
*/
public function findAllOrderedByName()
{
$r = $this->createQueryBuilder('c')
->orderBy('c.eq_libelle', 'ASC')
->getQuery()
->getResult();
return $r;
}
}
?>
10.4. Lister les équipements
Pour lister les véhicules il faut ajouter la fonction adéquate au niveau du contrôleur :
<?php
// ...
class VehiculeController extends AbstractController
{
#[Route('/vehicule/lister', name: 'vehicule_lister')]
public function lister(Request $request): Response
{
$liste_vehicules = $vehicule_repository->findAllOrdered();
return $this->render("vehicule/lister.html.twig", [
'liste_vehicules' => $liste_vehicules
]);
}
}
On réalise une énumération des véhicules (bloucle for) avec la variable e (pour élément)
et on affichera :
- l'identifiant du véhicule
- la marque du véhicule (ex: Volkswagen)
- le modèle du véhicule (ex: Tiguan)
- le conducteur associé au véhicule
- les boutons qui permettent de modifier ou supprimer le véhicule
<section>
<h2>Véhicules</h2>
<nav>
<ul>
<li><a href="/vehicule/creer">[+] Ajouter</a></li>
<li><a href="/vehicule/tout_supprimer">[x] Tout Supprimer</a></li>
</ul>
</nav>
<p>Aucun véhicule trouvé.</p>
<table>
<tr>
<th style="width: 50px">Id</th>
<th style="width: 150px">Marque</th>
<th style="width: 150px">Modèle</th>
<th style="width: 150px">Conducteur</th>
<th style="width: 50px">Suppr.</th>
<th style="width: 50px">Mod.</th>
</tr>
{%
for e in vehicules_list %
}
<tr>
<td class="center">{{ e.VeId }}</td>
<td> {{ e.VeMarque }}</td>
<td> {{ e.VeModele }}</td>
<td> {{ e.VeConducteur.CoNom }}</td>
<td class="center"><img src="{{ asset('images/delete.png') }}" alt="delete"
onclick="return vehicule_supprimer({{ e.VeId }}, '{{ e.VeMarque }}', '{{ e.VeModele }}');" /></td>
<td class="center"><img src="{{ asset('images/modify.png') }}" alt="modify"
onclick="return vehicule_modifier({{ e.VeId }}, '{{ e.VeMarque }}', '{{ e.VeModele }}');" /></td>
</tr>
</table>
</section>
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 :
<?php
// ...
class VehiculeController extends AbstractController
{
// ...
/**
* Supprimer un véhicule étant donné son id
*/
#[Route('/vehicule/supprimer/{id}', name: 'vehicule_supprimer')]
public function supprimer( $id ): Response
{
// Récupérer le vehicule par son id
$vehicule = $this->repository->find($id);
if (!$vehicule) {
throw $this->createNotFoundException('Aucun véhicule avec l\'identifiant ' . $id . ' n\'a été trouvé');
}
// Suppression du vehicule
$this->entity_manager->remove($vehicule);
$this->entity_manager->flush();
return $this->redirectToRoute('vehicule_lister');
}
/**
* Supprimer tous les véhicules (debug/test)
*/
#[Route('/vehicule/supprimer_tout', name: 'vehicule_supprimer_tout')]
public function supprimer_tout(): Response
{
// Récupérer les vehicules
$vehicules = $this->repository->findAll();
foreach($vehicules as $vehicule) {
$this->entity_manager->remove($vehicule);
}
$this->entity_manager->flush();
return $this->redirectToRoute('vehicule_lister');
}
// ...
}
?>
On notera que le véhicule est supprimé mais pas son conducteur.