Bonjour,

J’essai d’utiliser les sessions dans la version 5.3.9 de Symfony avec RequestStack parce que SessionInterface est obsolète.
J’obtiens l’erreur suivante :

Cannot use object of type Symfony\Component\HttpFoundation\Session\Session as array
à: if(isset($cart[$id])){ (dans ma fonction addToCart)

dans les versions précédentes, mon code marchait bien et j'ai même essayé ->$id au lieur de [$id] alors plus d'erreur mais pas de résultat non plus.

C'est peut-être à cause de ma fonction updateCart car je vois bien ce que j'insère manuellement, mais quand j'actualise la page, cela ne s'incrémente pas ?

Je vous remercie de votre aide

Mon CartController.php :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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;
 
class CartController extends AbstractController
{
    /**
     * @Route("/cart", name="cart")
     */
    public function index(CartServices $cartServices): Response
    {
        $cartServices->addToCart(3);
        dd($cartServices->getCart());
        return $this->render('cart/index.html.twig', [
            'controller_name' => 'CartController',
 
        ]);
    }
}
 
Mon CartServices.php :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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])){
            $cart[$id]++;
        }else{
            $cart[$id] = 1;
        }
        $this->updateCart($cart);
    }

Ma fonction updateCart:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
    public function updateCart($cart){
        $this->requestStack->getSession('cart', $cart);
    }

$cart = $this->getCart() :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
    public function getCart(){
        return $this->requestStack->getSession('cart', []);
    }