src/Controller/PropertiesController.php line 70

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use App\Entity\Properties;
  5. use App\Form\PropertiesType;
  6. use App\Repository\ImageRepository;
  7. use App\Repository\PropertiesRepository;
  8. use DateTimeImmutable;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  15. /**
  16.  * @Route("/properties")
  17.  */
  18. class PropertiesController extends AbstractController
  19. {
  20.     /**
  21.      * @Route("/", name="app_properties_index", methods={"GET"})
  22.      */
  23.     public function index(PropertiesRepository $propertiesRepository): Response
  24.     {
  25.         if ($this->getUser()->getRoles()[0] == "ROLE_ADMIN") {
  26.             $properties $propertiesRepository->findAll();
  27.         } else {
  28.             $properties $propertiesRepository->findBy(['user' => $this->getUser()]);
  29.         }
  30.         return $this->render('properties/index.html.twig', [
  31.             'properties' => $properties,
  32.         ]);
  33.     }
  34.     /**
  35.      * @IsGranted("ROLE_ADMIN")
  36.      * @Route("/new", name="app_properties_new", methods={"GET", "POST"})
  37.      */
  38.     public function new(Request $requestPropertiesRepository $propertiesRepository): Response
  39.     {
  40.         $property = new Properties();
  41.         $form $this->createForm(PropertiesType::class, $property);
  42.         $form->handleRequest($request);
  43.         if ($form->isSubmitted() && $form->isValid()) {
  44.         
  45.             $images $property->getImages();
  46.             foreach ($images as $key => $image) {
  47.                 $image->setProperties($property);
  48.                 $images->set($key$image);
  49.             }
  50.             $property->setCreatedAt(new DateTimeImmutable());
  51.         $property->setisAvailable(true);
  52.             $propertiesRepository->add($propertytrue);    
  53.             $this->addFlash('success''Ce bien a correctement été ajouté!');
  54.             return $this->redirectToRoute('app_properties_index', [], Response::HTTP_SEE_OTHER);
  55.         }
  56.         return $this->renderForm('properties/new.html.twig', [
  57.             'property' => $property,
  58.             'form' => $form,
  59.         ]);
  60.     }
  61.     /**
  62.      * @Route("/{id}", name="app_properties_show", methods={"GET"})
  63.      */
  64.     public function show(Properties $property): Response
  65.     {
  66.         return $this->render('properties/show.html.twig', [
  67.             'property' => $property,
  68.         ]);
  69.     }
  70.     /**
  71.      * @IsGranted("ROLE_ADMIN")
  72.      * @Route("/{id}/edit", name="app_properties_edit", methods={"GET","POST"})
  73.      */
  74.     public function edit(Request $requestProperties $propertyPropertiesRepository $propertiesRepositoryImageRepository $imageRepository): Response
  75.     {
  76.         $form $this->createForm(PropertiesType::class, $property);
  77.         $form->handleRequest($request);
  78.         if ($form->isSubmitted() && $form->isValid()) {
  79.             $images $property->getImages();
  80.             foreach ($images as $key => $image) {
  81.                 if ($image->getImageFile() == null) {
  82.                     $property->removeImage($image);
  83.                     $imageRepository->remove($imagetrue);
  84.                 } else {
  85.                     $image->setProperties($property);
  86.                     $images->set($key$image);
  87.                 }
  88.             }
  89.             $propertiesRepository->add($propertytrue);
  90.             $this->addFlash('success''les informations de la propriété ont bien été modifié!');
  91.             return $this->redirectToRoute('app_properties_index', [], Response::HTTP_SEE_OTHER);
  92.         }
  93.         return $this->renderForm('properties/edit.html.twig', [
  94.             'property' => $property,
  95.             'form' => $form,
  96.         ]);
  97.     }
  98.   
  99. /**
  100.  * @IsGranted("ROLE_ADMIN")
  101.  * @Route("/properties/{id}", name="app_properties_delete", methods={"POST"})
  102.  */
  103. public function delete(Request $requestProperties $propertyEntityManagerInterface $entityManager): Response
  104. {
  105.     $token $request->request->get('_token');
  106.     if (!$this->isCsrfTokenValid('delete' $property->getId(), $token)) {
  107.         throw $this->createAccessDeniedException('Token CSRF invalide.');
  108.     }
  109.     $entityManager->getConnection()->beginTransaction();
  110.     try {
  111.         $id $property->getId();
  112.         
  113.         // Suppression directe avec une requête SQL native
  114.         $sql "DELETE FROM properties WHERE id = :id";
  115.         $stmt $entityManager->getConnection()->prepare($sql);
  116.         $stmt->execute(['id' => $id]);
  117.         $entityManager->getConnection()->commit();
  118.         $this->addFlash('success''La propriété a été supprimée avec succès!');
  119.     } catch (\Exception $e) {
  120.         $entityManager->getConnection()->rollBack();
  121.         // Afficher le message complet de l'erreur
  122.         $this->addFlash('error''Une erreur est survenue lors de la suppression de la propriété : ' $e->getMessage());
  123.         // Optionnel : Logguer l'erreur $e
  124.     }
  125.     return $this->redirectToRoute('app_properties_index', [], Response::HTTP_SEE_OTHER);
  126. }
  127. }