src/Controller/Front/Boutique/Panier/PanierController.php line 53

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front\Boutique\Panier;
  3. use App\Entity\Boutique\Evenement\Evenement;
  4. use App\Entity\Boutique\Panier\PanierLigne;
  5. use App\Entity\Boutique\Produit\Produit;
  6. use App\Entity\PostType\PostTypeProduit;
  7. use App\Form\Front\AjouterAuPanierType;
  8. use App\Repository\Boutique\Panier\PanierRepository;
  9. use App\Utils\Panier\PanierService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Security\Core\Security;
  16. class PanierController extends AbstractController
  17. {
  18.     public function __construct(
  19.         private PanierService $panierService
  20.     ) {
  21.     }
  22.     #[Route('/front/shop/panier'name'app_front_boutique_panier')]
  23.     public function index(Security $securityPanierRepository $panierRepository): Response
  24.     {
  25.         return $this->render('front/boutique/panier/index.html.twig', [
  26.             'controller_name' => 'PanierController',
  27.             // @phpstan-ignore-next-line
  28.             'panier' => $panierRepository->findOneBy(['client' => $security->getUser()->getClient()->getId()]),
  29.         ]);
  30.     }
  31.     #[Route('/front/shop/panier/vider/{id}'name'app_front_boutique_panier_vider')]
  32.     public function viderPanier(int $idPanierRepository $panierRepository): Response
  33.     {
  34.         $panier $panierRepository->findOneBy(['id' => $id]);
  35.         foreach ($panier->getPanierLignes() as $ligne) {
  36.             $panier->removePanierLigne($ligne);
  37.         }
  38.         $panier->setTotalHt(0);
  39.         $panierRepository->add($paniertrue);
  40.         return $this->redirectToRoute('app_front_boutique_panier');
  41.     }
  42.     #[Route('/front/boutique/panier/{id<[1-9]\d*>}/ajouter-au-panier'name'app_front_boutique_panier_ajouter_au_panier'methods: ['GET''POST'])]
  43.     public function ajouterAuPanier(
  44.         int $id,
  45.         EntityManagerInterface $em,
  46.         Request $request,
  47.         PanierRepository $panierRepository
  48.     ): Response {
  49.         $panierLigne = new PanierLigne();
  50.         $form $this->createForm(AjouterAuPanierType::class, $panierLigne);
  51.         $form->handleRequest($request);
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             $produitType $em->getRepository(PostTypeProduit::class)->findOneBy(['id' => $id]);
  54.             $panierEnCours $this->panierService->findPanier();
  55.             $this->panierService->addLigne($produitType$panierEnCours$panierLigne);
  56.             $this->panierService->calculPanier($panierEnCours);
  57.             $panierRepository->add($panierEnCourstrue);
  58.             if ($produitType instanceof Produit) {
  59.                 return $this->redirectToRoute('app_front_produit_detail', ['name' => $produitType->getName()], Response::HTTP_SEE_OTHER);
  60.             } elseif ($produitType instanceof Evenement) {
  61.                 return $this->redirectToRoute('app_front_evenements_detail', ['name' => $produitType->getName()], Response::HTTP_SEE_OTHER);
  62.             }
  63.             return $this->redirectToRoute('app_front_cours_detail', ['name' => $produitType->getName()], Response::HTTP_SEE_OTHER);
  64.         }
  65.         return $this->renderForm('front/boutique/produit/include/_ajouterAuPanier.html.twig', [
  66.             'id' => $id,
  67.             'panier_ligne' => $panierLigne,
  68.             'form' => $form,
  69.         ]);
  70.     }
  71. }