lib/boab/ecommerce-bundle/src/Storage/CartStorage.php line 91

Open in your IDE?
  1. <?php
  2. namespace Boab\EcommerceBundle\Storage;
  3. use Boab\EcommerceBundle\Entity\Cart;
  4. use Boab\EcommerceBundle\Entity\Order;
  5. use Boab\EcommerceBundle\Entity\CartInterface;
  6. use Boab\EcommerceBundle\Repository\CartRepository;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. class CartStorage
  10. {
  11.     /**
  12.      * The request stack.
  13.      *
  14.      * @var RequestStack
  15.      */
  16.     private $requestStack;
  17.     /**
  18.      * The cart repository.
  19.      *
  20.      * @var OrderRepository
  21.      */
  22.     private $cartRepository;
  23.     /**
  24.      * @var string
  25.      */
  26.     public const CART_KEY_NAME '__SHOPPING_CART__';
  27.     /**
  28.      * CartSessionStorage constructor.
  29.      */
  30.     public function __construct(RequestStack $requestStackCartRepository $cartRepository)
  31.     {
  32.         $this->requestStack $requestStack;
  33.         $this->cartRepository $cartRepository;
  34.     }
  35.     /**
  36.      * Gets the cart in session.
  37.      */
  38.     public function getCart(): ?CartInterface
  39.     {
  40.         if(!$this->getCartId()){
  41.             return new Cart([]);
  42.         }
  43.         
  44.         $cart $this->cartRepository->findOneBy([
  45.             'uniqueId' => $this->getCartId(),
  46.             'status' => CartInterface::STATUS_CART,
  47.         ]);
  48.         if(!$cart){
  49.             return new Cart([]);
  50.         }
  51.         return $cart;
  52.     }
  53.     /**
  54.      * Sets the cart in session.
  55.      */
  56.     public function save(CartInterface $cart): void
  57.     {
  58.         if(!$cart->getUniqueId()){
  59.             $cart->setCreatedAt(new \DateTime('now'));
  60.             $cart->setUniqueId(bin2hex(random_bytes(20)));
  61.             $cart->setStatus(CartInterface::STATUS_CART);
  62.         }else{
  63.             $cart->setUpdatedAt(new \DateTime('now'));
  64.         }
  65.         $cart $this->cartRepository->saveCart($cart);
  66.         $this->getSession()->set(self::CART_KEY_NAME$cart->getUniqueId());
  67.         //$this->session->set(self::CART_KEY_NAME, serialize($cart));        
  68.     }
  69.     public function emptyCart():void
  70.     {
  71.         $this->getSession()->remove(self::CART_KEY_NAME);
  72.     }
  73.     /**
  74.      * Returns the cart id.
  75.      */
  76.     private function getCartId(): ?string
  77.     {
  78.         return $this->getSession()->get(self::CART_KEY_NAME);
  79.     }
  80.     private function getSession(): SessionInterface
  81.     {
  82.         return $this->requestStack->getSession();
  83.     }    
  84. }