bundles/mldev-order-bundle/src/Controller/CartController.php line 44

Open in your IDE?
  1. <?php
  2. namespace MLDev\OrderBundle\Controller;
  3. use App\Service\Promocode\Promocode;
  4. use MLDev\BaseBundle\Controller\FrontController;
  5. use MLDev\BaseBundle\Service\PageManager;
  6. use MLDev\OrderBundle\Service\Cart\ProviderInterface;
  7. use MLDev\OrderBundle\Service\CartService;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use Symfony\Component\Routing\Annotation\Route;
  13. /**
  14.  * Class CartController
  15.  * @package MLDev\OrderBundle\Controller
  16.  */
  17. class CartController extends FrontController
  18. {
  19.     /**
  20.      * @var Request
  21.      */
  22.     private $request;
  23.     /**
  24.      * @var CartService
  25.      */
  26.     private $cartService;
  27.     /**
  28.      * BasketController constructor.
  29.      */
  30.     public function __construct(CartService $cartServiceRequestStack $requestStack)
  31.     {
  32.         $this->cartService $cartService;
  33.         $this->request $requestStack->getCurrentRequest();
  34.     }
  35.     /**
  36.      * @Route("/cart", methods={"GET", "POST"}, name="mldev-front-cart-index")
  37.      */
  38.     public function indexAction(ProviderInterface $providerPageManager $pageManager): Response
  39.     {
  40.         $entity $pageManager->createVirtualEntity('Корзина''/cart');
  41.         return $this->renderCustomTemplate($entity'@MLDevOrder/cart/index.html.twig', [
  42.             'cartItems' => $this->cartService->getCartItems(),
  43.             'cost' => $provider->getCost(),
  44.             'count' => $provider->getCount(),
  45.             'items' => $provider->getItems(),
  46.         ]);
  47.     }
  48.     /**
  49.      * @Route("/cart/details", methods={"GET", "POST"}, name="mldev-front-cart-details", defaults={"_format": "json"})
  50.      */
  51.     public function detailsAction(ProviderInterface $providerPromocode $promocode): JsonResponse
  52.     {
  53.         $code $promocode->get();
  54.         return $this->json(
  55.             [
  56.                 'promocode' => $code $code->getCode() : null,
  57.                 'promocode_discount' => $code $code->getDiscount() : null,
  58.                 'cost' => $provider->getCost(),
  59.                 'count' => $provider->getCount(),
  60.                 'items' => $provider->getItems(),
  61.                 'cart_url' => $this->generateUrl('mldev-front-cart-index'),
  62.                 'order_url' => $this->generateUrl('mldev-front-order-index')
  63.             ]
  64.         );
  65.     }
  66.     /**
  67.      * @Route("/cart/set", methods={"POST"}, name="mldev-front-cart-set", defaults={"_format": "json"})
  68.      */
  69.     public function setAction(): JsonResponse
  70.     {
  71.         $data json_decode($this->request->getContent(), true);
  72.         $id = (isset($data['id']) ? (integer)$data['id'] : 0);
  73.         $count = (isset($data['count']) ? (integer)$data['count'] : 0);
  74.         return $this->json(
  75.             $this->cartService->getStorage()->set($id$count)
  76.         );
  77.     }
  78.     /**
  79.      * @Route("/cart/remove", methods={"POST"}, name="mldev-front-cart-remove", defaults={"_format": "json"})
  80.      */
  81.     public function removeAction(): JsonResponse
  82.     {
  83.         $data json_decode($this->request->getContent(), true);
  84.         $id = (isset($data['id']) ? (integer)$data['id'] : 0);
  85.         return $this->json(
  86.             $this->cartService->getStorage()->remove($id)
  87.         );
  88.     }
  89.     /**
  90.      * @Route("/cart/clear", methods={"POST"}, name="mldev-front-cart-clear", defaults={"_format": "json"})
  91.      */
  92.     public function clearAction(): JsonResponse
  93.     {
  94.         $this->cartService->clearCart();
  95.         return $this->json([]);
  96.     }
  97. }