custom/plugins/TwigelSportB2b/src/Subscriber/BeforeLineItemAdd.php line 28

Open in your IDE?
  1. <?php
  2. namespace Twigel\SportB2B\Subscriber;
  3. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  4. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. class BeforeLineItemAdd implements EventSubscriberInterface
  9. {
  10.     /** @var RequestStack  */
  11.     private RequestStack $request;
  12.     public function __construct($request)
  13.     {
  14.         $this->request $request;
  15.     }
  16.     public static function getSubscribedEvents(): array
  17.     {
  18.         return [
  19.             BeforeLineItemAddedEvent::class => 'lineItem'
  20.         ];
  21.     }
  22.     public function lineItem(BeforeLineItemAddedEvent $event):void
  23.     {
  24.         $productPrice $this->request->getCurrentRequest()->request->get('productPrice');
  25.         $productId $this->request->getCurrentRequest()->request->get('productId');
  26.         if ($productPrice === null || $productId === null || !is_numeric($productPrice) || !is_string($productId)) {
  27.             return;
  28.         }
  29.         $cart $event->getCart();
  30.         /** @var LineItem $item */
  31.         foreach ($cart->getLineItems() as $item) {
  32.             if ($item->getId() === $this->request->getCurrentRequest()->request->get('productId')) {
  33.                 $item->setPayloadValue('price'$productPrice);
  34.             }
  35.         }
  36.     }
  37. }