Gestion des sessions avec RequestStack
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 :
Citation:
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:
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:
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:
1 2 3
| public function updateCart($cart){
$this->requestStack->getSession('cart', $cart);
} |
$cart = $this->getCart() :
Code:
1 2 3
| public function getCart(){
return $this->requestStack->getSession('cart', []);
} |