LineItemAddedEvent und eigene Payloads

Moin,

  1. ist es möglich über ein LineItemAddedEvent den Payload des betroffenen LiteItems zu ändern (Bevor das LineItem in den Warenkorbe kommt)?
  2. Wäre es möglich in dem Event an den RequestDataBag zu gelangen?
  3. Ist ein persist des Warenkorbes in dem Event möglich?

Würde es evtl nicht Sinn machen, noch ein Event davor zu schalten? (Sonst muss man den CartLineItemController immer neu schreiben, nur weil man das LineItem erweitern möchte, bevor es in den Warenkorb gelegt wird).

Viele Grüße

Philipp

<?php

  namespace Nextag\Checkout\Subscriber;   use Shopware\Core\Checkout\Cart\Event\LineItemAddedEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\RequestStack;   class LineItemAdded implements EventSubscriberInterface {     private $requestStack;       public function \_\_construct(RequestStack $requestStack)     {         $this-\>requestStack = $requestStack;     }       public static function getSubscribedEvents()     {         return [             LineItemAddedEvent::class =\> 'onLineItemAdded'         ];     }       public function onLineItemAdded(LineItemAddedEvent $event)     {         $lineItem = $event-\>getLineItem();         foreach ($this-\>requestStack-\>getCurrentRequest()-\>get('lineItems') as $key =\>  $item) {             if ($lineItem-\>getReferencedId() == $key && isset($item['customData'])) {                 $lineItem-\>setPayloadValue('customData', $item['customData']);             }             if ($lineItem-\>getReferencedId() == $key && isset($item['isSample'])) {                 $lineItem-\>setPayloadValue('isSample', $item['isSample']);             }             if ($lineItem-\>getReferencedId() == $key && isset($item['sampleNo'])) {                 $lineItem-\>setPayloadValue('sampleNo', $item['sampleNo']);             }         }     } }
2 „Gefällt mir“

Hallo „Moorleiche“,

  1. fände ich auch nicht schlecht, da im LineItem ja nur die id, type, referenceId,quantity übergeben werden,

wenn ich mich jetzt nicht total täusche:

https://github.com/shopware/platform/blob/da9e08b8a460f79f8e9c503558e8bc516176c3b5/src/Storefront/Controller/CartLineItemController.php#L238

oliverriske@ : Wüßte nicht, wie „$item[‚customData‘]“ funktionieren sollte, ist ja nicht vorhanden. Würde mich aber gerne eines besseren belehren lassen!

 

Habe auch ziemlich mit der Funktionalität von „addLineItems“ im CartLineItemController zu kämpfen, klar, kann ich dekorieren oder überschreiben oder

gleich die Url  ändern, mach ja z.B. das Plugin „Custom Products“  eben genau so. Nur wenn man das Plugin braucht aber selbst noch was hinzufügen will,

wird es sehr schwierig. Zwei Plugins, die die Methode überschreiben…

Finde diese Methode alles andere als gut durchdacht.

Gruß,

Werner.

@oliverriske‍

Der Ansatz ist gar nicht mal so schlecht!

Das LineItem ist doch aber meines Wissens bereits im WK bevor das Event angestoßen wird oder?

Danke @oliverriske ! Funktioniert perfekt für mich. 

Die folgende Anweisung muss dann noch in die services.xml