src/Controller/CartController.php line 29

  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Service;
  4. use App\Repository\ServiceRepository;
  5. use App\Twig\Extension\AppExtension;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  11. use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. use Twig\Environment;
  14. class CartController extends AbstractController
  15. {
  16.     private $em;
  17.     private $twig;
  18.     public function __construct(EntityManagerInterface $em,Environment $twig ){
  19.         $this->em=$em;
  20.         $this->twig=$twig;
  21.     }
  22.     #[Route('/cart'name'app_cart_index')]
  23.     public function index(SessionInterface $sessionServiceRepository $serviceRepository): Response
  24.     {
  25.         $response = new Response(); // A supprimer apres fin dev
  26.         $services=$this->em->getRepository(Service::class)
  27.             ->findBy([],['id'=>"ASC"]);
  28.         $response->headers->set(AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER'true'); // A supprimer apres fin dev
  29.         $cartProduct $this->twig->getExtension(AppExtension::class)->getCartProduct($session); // Appelez la fonction via l'extension Twig
  30.         return $this->render('cart/index.html.twig', [
  31.             'services' => $services,
  32.             'cartProduct' => $cartProduct,
  33.         ]);
  34.     }
  35.     /**
  36.      * @Route("/add/{id}", name="cart_add")
  37.      */
  38.     public function add(Service $serviceSessionInterface $session,Request $request)
  39.     {
  40.         $product_cart $this->em->getRepository(Service::class)->find($service->getId());
  41.         if (!$service) {
  42.             throw $this->createNotFoundException('Le produit n\'existe pas.');
  43.         }
  44.         // Récupérer le tableau existant dans la session ou créer un nouveau tableau s'il n'existe pas
  45.         $products $session->get('products', array());
  46.         // Incrémenter le nombre de produits à chaque ajout
  47.         $productCount count($products) + 1;
  48.         // Vérifier si un nouveau produit a été ajouté via la méthode POST
  49.         if ($request->isMethod('POST')) {
  50.             $_shop_src $request->request->get('_shop_src');
  51.             $shop_qnty $request->request->get('_shop_qnty');
  52.             $product$product_cart;
  53.             // Ajouter un nouveau produit au tableau
  54.             $newProduct = array(
  55.                 'product_id'=>uniqid(),
  56.                 '_shop_src' => $_shop_src,
  57.                 '_shop_qnty' => $shop_qnty,
  58.                 'product' => $product,
  59.             );
  60.             $products[] = $newProduct;
  61.             // Mettre à jour le tableau dans la session
  62.             $session->set('products'$products);
  63.             // Rediriger l'utilisateur vers la même page pour éviter les re-submissions du formulaire
  64.             $referer $request->headers->get('referer');
  65.             $this->addFlash('success'"Panier mise à jour ");
  66.             //Redirect to success page
  67.             return $this->redirect($referer);
  68.         }
  69.         return $this->redirectToRoute("app_cart_index");
  70.     }
  71.     /**
  72.      * @Route("/cart/remove/{productId}", name="remove_from_cart")
  73.      */
  74.     public function removeFromCartAction(Request $request$productId,SessionInterface $session)
  75.     {
  76.         // Récupérer le panier de la session
  77.         $products $session->get('products');
  78.         $cart array_filter($products, function($item) use ($productId) {
  79.             return $item['product_id'] !== $productId;
  80.         });
  81.         //Enregistrer le panier modifié dans la session
  82.         $session->set('products'$cart);
  83.         return $this->redirectToRoute("app_cart_index");
  84.     }
  85. }