<?php
namespace App\Controller;
use App\Entity\BookAd;
use App\Repository\BasketRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
#[IsGranted('ROLE_USER')]
class BasketController extends AbstractController
{
// 05-04
// affichage du panier de l'utilisateur
#[Route('/mon-panier', name: 'app_basket_show')]
public function show(): Response
{
return $this->render('basket/show.html.twig', [
// j'aurais aussi bien pu metre ads que books ou basketBooks
// 'ads' => $this->getUser()->getBasket()->getBooks()
// not even needed anyway
]);
// on peut aussi l'écrire directement comme ça en fait :
// return $this->render('basket/show.html.twig');
}
// 05-04
// ajouter un livre au panier de l'utilisateur
#[Route('/mon-panier/ajouter/{id}', name: 'app_basket_add')]
public function add(BookAd $book, BasketRepository $repository): Response
{
// full yolo - it works lmao :
// c'est vraiment la bonne méthode en fait
/*
$basket = $this->getUser()->getBasket();
$basket->addBook($book);
$repository->save($basket, true);
*/
// je c/c la correction complète parce qu'il faut détacher getUser()
// pour le problème de soulignage / erreur vsc/intelephense sur getBasket()
// même problème comme ça btw :
// $repository->save($this->GetUser()->getBasket()->addBook($book, true));
// Je récupère l'utilisateur connécté
/**
* Ceci est un commentaire de documentation. Ici, ce commentaire
* permet à vscode de forcer le type d'une variable. Ici : User
*
* @var User
*/
$user = $this->getUser();
// Je récupère son panier
$basket = $user->getBasket();
// J'ajoute le livre dans le panier
$basket->addBook($book);
// J'enregistre le panier
$repository->save($basket, true);
return $this->redirectToRoute('app_basket_show');
}
// 05-04
// supprimer un livre du panier de l'utilisateur
// (Correction du 06-04 parce que j'avais déjà fait le truc une fois)
#[Route('/mon-panier/supprimer/{id}', name: 'app_basket_remove')]
public function remove(BookAd $book, BasketRepository $repository): Response
{
// Je récupère l'utilisateur connécté
/**
* @var User
*/
$user = $this->getUser();
// Je récupère son panier
$basket = $user->getBasket();
// Je supprime le livre du panier
$basket->removeBook($book);
// J'enregistre le panier
$repository->save($basket, true);
// Je redirige vers la page du panier
return $this->redirectToRoute('app_basket_show');
}
}