Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utiliser des sessions dans Symfony version 5.3.9 a

    25 octobre 2021 à 15:39:43

    Bonjour,

    J'essaie d'utiliser des sessions dans Symfony version 5.3.9 avec RequestStack car SessionInterface est obsolète mais je n'obtiens aucun résultat alors que dans les versions précédentes c'était ok alors je poste ma question ici car autre part, je ne trouve pas et après avoir mainte fois essayé.

    Je vous remercie de votre aide.

    Résultat:

    CartController.php on line 20:
    []

    CartController.php :

    <?php
    
    namespace App\Controller;
    
    use App\Services\CartServices;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\Session\SessionInterface;
    
    
    class CartController extends AbstractController
    {
        /**
         * @Route("/cart/add/{id}")
         */
        public function addToCart($id,CartServices $cartServices):Response
        {
            $cartServices->addToCart($id);
            dd($cartServices->getCart(1));
            return $this->render('cart/index.html.twig', [
                'controller_name' => 'CartController',
    
            ]);
        }
    }

    CartServices.php:

    <?php
    
    namespace App\Services;
    
    use App\Repository\ProductRepository;
    use Symfony\Component\HttpFoundation\RequestStack;
    
    class CartServices
    {
        private $requestStack;
        private $repoProduct;
    
        public function __construct(RequestStack $requestStack, ProductRepository $repoProduct)
        {
            $this->requestStack = $requestStack;
            $this->repoProduct = $repoProduct;
        }
        
        public function addToCart($id){
            $cart = $this->getCart();
            if(isset($cart[$id])){
                //produit déjà dans le panier on incrémente
                $cart[$id]++;
            }else{
                //produit pas encore dans le panier on ajoute
                $cart[$id] = 1;
            }
            $this->updateCart($cart);
        }
    
        public function deleteFromCart($id){
            $cart = $this->getCart();
            //si produit déjà dans le panier 
            if(isset($cart[$id])){
                //si il y a plus d'une fois le produit dans le panier on décrémente
                if($cart[$id] >1){
                    $cart[$id] --;
                }else{
                    //Sinon on supprime
                    unset($cart[$id]);
                }
                //on met à jour la session
                $this->updateCart($cart);
            }
        }
    
        public function deleteAllToCart($id){
            $cart = $this->getCart();
            //si produit(s) déjà dans le panier 
            if(isset($cart[$id])){
                    //on supprime
                    unset($cart[$id]);
                }
                //on met à jour la session
                $this->updateCart($cart);
        }
    
        public function deleteCart(){
            //on supprime tous les produits (on vide le panier)
            $this->updateCart([]);
        }
    
        // public function updateCart($cart){
        //     $this->requestStack->getSession('cart', $cart);
        // }
        public function updateCart($cart){
            $this->requestStack->getSession->set('cart', $cart);
        }
    
        public function getCart(){
            $session =  $this->requestStack->getSession();
            return $session->get('cart', []);
        }
    
        public function getFullCart(){
            $cart = $this->getCart();
            $fullCart = [];
            foreach ($cart as $id => $quantity){
                $product = $this->repoProduct->find($id);
                if($product){
                     //produit récupéré avec succés
                     $fullCart[]=[
                        'quantity' => $quantity,
                        'product' => $product
                    ];
                }else{
                    //id incorrect
                    $this->deleteFromCart($id); //on ne met pas à jour la session car cette method le fait aussi (voir plus haut dans la fonction deleteFromCart)
                }
            }
        }
    
    }




    • Partager sur Facebook
    • Partager sur Twitter
      25 octobre 2021 à 17:33:30

      Salut,

      Dans updateCart, getSession() non?

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        25 octobre 2021 à 23:02:41

        Est-ce que les erreurs sont activées ? Parce le getSession sans () aurait dû t'envoyer une erreur. Dans le addToCart, rajoute un dd($cart), juste avant l'appel de updateCart.

        • Partager sur Facebook
        • Partager sur Twitter
        le bienfait n'est jamais perdu

        Utiliser des sessions dans Symfony version 5.3.9 a

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown