src/Module/Checkout/Subscriber/RenderAjaxCartSubscriber.php line 63

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Module\Checkout\Subscriber;
  4. use App\Module\Checkout\Normalizer\CartNormalizer;
  5. use App\Module\ShortSimpleCheckout\Event\View\CartDispatchEvent;
  6. use App\Module\ShortSimpleCheckout\Events;
  7. use App\Module\ShortSimpleCheckout\Exception\VariableAlreadyDefinedException;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Twig\Environment;
  10. use Twig\Error\LoaderError;
  11. use Twig\Error\RuntimeError;
  12. use Twig\Error\SyntaxError;
  13. /**
  14. * Render the cart for ajax requests
  15. *
  16. * @author André Varelmann <andre.varelmann@bestit-online.de>
  17. * @package App\Module\Checkout\Subscriber
  18. */
  19. class RenderAjaxCartSubscriber implements EventSubscriberInterface
  20. {
  21. private CartNormalizer $cartNormalizer;
  22. private Environment $twig;
  23. /**
  24. * RenderAjaxCartSubscriber constructor.
  25. *
  26. * @param CartNormalizer $cartNormalizer
  27. * @param Environment $twig
  28. */
  29. public function __construct(CartNormalizer $cartNormalizer, Environment $twig)
  30. {
  31. $this->cartNormalizer = $cartNormalizer;
  32. $this->twig = $twig;
  33. }
  34. /**
  35. * Get subscribed events
  36. *
  37. * @return array|string[]
  38. */
  39. public static function getSubscribedEvents(): array
  40. {
  41. return [Events::CART_INDEX_AJAX_DISPATCH => 'render'];
  42. }
  43. /**
  44. * Render cart in twig and return "html" property and line items count in json result
  45. *
  46. * @param CartDispatchEvent $event
  47. *
  48. * @throws LoaderError Twig error
  49. * @throws RuntimeError Twig error
  50. * @throws SyntaxError Twig error
  51. * @throws VariableAlreadyDefinedException When variable already defined
  52. *
  53. * @return void
  54. */
  55. public function render(CartDispatchEvent $event): void
  56. {
  57. $event->addVariable(
  58. 'html',
  59. $this->twig->render('components/organisms/offcanvas-cart-line-item/offcanvas-cart-line-item.html.twig')
  60. );
  61. }
  62. }