src/Module/Checkout/Subscriber/CartCustomFieldSubscriber.php line 51

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Module\Checkout\Subscriber;
  4. use App\Module\Checkout\Provider\CartProvider;
  5. use App\Module\ShortSimpleCheckout\Controller\ConfirmController;
  6. use App\Module\ShortSimpleCheckout\Controller\Facade\CustomFieldControllerFacadeInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. /**
  11. * Writes data like customer comment and customer reference into custom fields of the cart before validation
  12. *
  13. * @author André Varelmann <andre.varelmann@bestit-online.de>
  14. * @package App\Module\Checkout\Subscriber
  15. */
  16. class CartCustomFieldSubscriber implements EventSubscriberInterface
  17. {
  18. private CartProvider $cartProvider;
  19. private CustomFieldControllerFacadeInterface $customFieldControllerFacade;
  20. /**
  21. * @param CartProvider $cartProvider
  22. * @param CustomFieldControllerFacadeInterface $customFieldControllerFacade
  23. */
  24. public function __construct(
  25. CartProvider $cartProvider,
  26. CustomFieldControllerFacadeInterface $customFieldControllerFacade
  27. ) {
  28. $this->cartProvider = $cartProvider;
  29. $this->customFieldControllerFacade = $customFieldControllerFacade;
  30. }
  31. /**
  32. * @return array
  33. */
  34. public static function getSubscribedEvents(): array
  35. {
  36. // priority 999 to do this before the validators
  37. return [KernelEvents::CONTROLLER => ['onKernelController', 999]];
  38. }
  39. /**
  40. * @param ControllerEvent $event
  41. *
  42. * @return void
  43. */
  44. public function onKernelController(ControllerEvent $event): void
  45. {
  46. $controller = $event->getController();
  47. if (!is_array($controller)) {
  48. return;
  49. }
  50. $controller = $controller[0];
  51. $request = $event->getRequest();
  52. if (get_class($controller) === ConfirmController::class
  53. && ($request->request->has('customerComment') || $request->request->has('customerReference'))
  54. ) {
  55. $this->customFieldControllerFacade->setCart(
  56. [
  57. 'customerComment' => $request->request->get('customerComment'),
  58. 'customerReference' => $request->request->get('customerReference'),
  59. ],
  60. $this->cartProvider->getCart()
  61. );
  62. }
  63. }
  64. }