bundles/mldev-order-bundle/src/Service/CartStorage.php line 43

Open in your IDE?
  1. <?php
  2. namespace MLDev\OrderBundle\Service;
  3. use Symfony\Component\HttpFoundation\RequestStack;
  4. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  5. /**
  6.  * Class CartStorage
  7.  * @package MLDev\OrderBundle\Service
  8.  */
  9. class CartStorage
  10. {
  11.     /**
  12.      *
  13.      */
  14.     const STORAGE_KEY 'mldev-cart-storage';
  15.     /**
  16.      * @var SessionInterface
  17.      */
  18.     private $session;
  19.     /**
  20.      * @var RequestStack
  21.      */
  22.     private $requestStack;
  23.     /**
  24.      * Cart constructor.
  25.      */
  26.     public function __construct(RequestStack $requestStack)
  27.     {
  28.         $this->requestStack $requestStack;
  29.     }
  30.     /**
  31.      * Read data from session
  32.      */
  33.     public function read(): array
  34.     {
  35.         return $this->getSession()->get(self::STORAGE_KEY, []);
  36.     }
  37.     /**
  38.      * Write data in session
  39.      */
  40.     public function write(array $data = []): void
  41.     {
  42.         $this->getSession()->set(self::STORAGE_KEY$data);
  43.     }
  44.     /**
  45.      * Set element by id and count
  46.      */
  47.     public function set(int $idint $count): array
  48.     {
  49.         $storage $this->read();
  50.         // set item and count to storage
  51.         $storage[$id] = $count;
  52.         //check and remove
  53.         if (!$storage[$id]) {
  54.             // remove item from storage
  55.             unset($storage[$id]);
  56.         }
  57.         $this->write($storage);
  58.         return $storage;
  59.     }
  60.     /**
  61.      * Remove element by id
  62.      */
  63.     public function remove(int $id): array
  64.     {
  65.         $storage $this->read();
  66.         //check and remove
  67.         if ($storage[$id]) {
  68.             // remove item from storage
  69.             unset($storage[$id]);
  70.         }
  71.         $this->write($storage);
  72.         return $storage;
  73.     }
  74.     /**
  75.      * Clear session storage
  76.      */
  77.     public function clear(): void
  78.     {
  79.         $this->write();
  80.     }
  81.     private function getSession()
  82.     {
  83.         if (!$this->session) {
  84.             $this->session $this->requestStack->getSession();
  85.         }
  86.         return $this->session;
  87.     }
  88. }