# Options payload wird gelöscht

**URL:** <https://forum.shopware.com/t/options-payload-wird-geloescht/103527>\
**Category:** Shopware 6 (German)\
**Created:** [3. April 2024 um 06:11 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527 "2024-04-03T06:11:34Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![goldbachmedien](https://avatars.discourse-cdn.com/v4/letter/g/ba9def/32.png) [@goldbachmedien](https://forum.shopware.com/u/goldbachmedien)\
**Post date:** [3. April 2024 um 06:11 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/1 "2024-04-03T06:11:34Z")

</div>

Moin zusammen,

ich dekoriere die CartItemAddRoute und reicher das LineItem vor der Weitergabe etwas an. Wenn ich den payload wie folgt anreichere  
`$items[0]->setPayloadValue('foo', 'bar');`  
gibt es kein Problem und der Wert bleibt mir erhalten.

Wenn ich jetzt allerdings `options` belege, werden mir die einfach gelöscht. Unter 6.4 hatte ich das nicht, da blieben mir die schön erhalten.

Ich hab den Cart jetzt im Debugger etwas verfolgt und festgestellt, dass die `options` erst im **CartCalculator** aus dem **LineItem** gelöscht werden.

Ist jemand über ein ähnliches Problem gestolpert?

---

<div class="post-metadata">

**Author:** ![christian.werner](https://avatars.discourse-cdn.com/v4/letter/c/f05b48/32.png) [@christian.werner](https://forum.shopware.com/u/christian.werner)\
**Post date:** [8. Mai 2024 um 07:26 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/2 "2024-05-08T07:26:54Z")

</div>

Hi Goldbachmedien,  
ich habe das gleiche Problem. Konntest Du es schon lösen?  
Beste Grüße  
Christian

---

<div class="post-metadata">

**Author:** ![mstegmeyer](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mstegmeyer/32/23791_2.png) [@mstegmeyer](https://forum.shopware.com/u/mstegmeyer)\
**Post date:** [8. Mai 2024 um 09:42 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/3 "2024-05-08T09:42:16Z")

</div>

Hallo Christian,

ja, die Payload wird nun im ProductCartProcessor zuverlässiger überschrieben, was dazu führt, dass Dinge, die vor dem Processor unter einem existierenden Payload-Key geschrieben werden, ersetzt werden.

Ich weiß nicht, was ihr vorhabt, vielleicht genügt euch ja auch einfach nur ein anderer Key statt `options`?  
Ansonsten wäre die Lösung, sich nicht an die Route zu hängen, sondern in den Cart-Prozess und die Daten erst nach dem ProductCartProcessor zu schreiben ([Add Cart Collector/Processor | Shopware Documentation](https://developer.shopware.com/docs/guides/plugins/plugins/checkout/cart/add-cart-processor-collector.html))

Viele Grüße  
Max

---

<div class="post-metadata">

**Author:** ![christian.werner](https://avatars.discourse-cdn.com/v4/letter/c/f05b48/32.png) [@christian.werner](https://forum.shopware.com/u/christian.werner)\
**Post date:** [8. Mai 2024 um 10:37 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/4 "2024-05-08T10:37:33Z")

</div>

Vielen Dank für die schnelle Antwort!  
Ich bin mir nicht sicher, ob die Folgesystem die Daten übernehmen (bzw. wenn der cart in eine order umgewandelt wird), wenn ich einen eigenen key verwende.  
Aber super, das hilft mir als Lösungsansatz schonmal weiter!

---

<div class="post-metadata">

**Author:** ![mstegmeyer](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/mstegmeyer/32/23791_2.png) [@mstegmeyer](https://forum.shopware.com/u/mstegmeyer)\
**Post date:** [8. Mai 2024 um 10:41 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/5 "2024-05-08T10:41:50Z")

</div>

Hey Christian,

ja, auch andere Keys werden in die Order übernommen, siehe im `\Shopware\Core\Checkout\Cart\Order\Transformer\LineItemTransformer`.

---

<div class="post-metadata">

**Author:** ![christian.werner](https://avatars.discourse-cdn.com/v4/letter/c/f05b48/32.png) [@christian.werner](https://forum.shopware.com/u/christian.werner)\
**Post date:** [8. Mai 2024 um 10:47 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/6 "2024-05-08T10:47:09Z")

</div>

Ich habs mir grad mal bei uns angesehen, das Modul und die Schnittstelle zum ERP gehen immer vom options key aus. Ich schaue mal, das ich mich an einer anderen Stelle als bisher einhake.  
Danke. Es hat mir als Hirnanstoß aber sehr geholfen.

---

<div class="post-metadata">

**Author:** ![christian.werner](https://avatars.discourse-cdn.com/v4/letter/c/f05b48/32.png) [@christian.werner](https://forum.shopware.com/u/christian.werner)\
**Post date:** [8. Mai 2024 um 11:29 UTC](https://forum.shopware.com/t/options-payload-wird-geloescht/103527/7 "2024-05-08T11:29:44Z")

</div>

Hat geklappt. Im Processor schreibe ich die Daten aus meinem custom key in den options key.  
Ist jetzt vielleicht nicht die feine, englische Art aber es löst erstmal mein Problem.

Achtung: Die originalen options werden dabei natürlich überschrieben. Wenn man diese noch braucht, holt man sich diese zuvor einfach aus der payload und macht ein array merge.

```auto
<service id="Vendor\ModulName\Cart\Checkout\ConfiguratorCartHandler">
         <tag name="shopware.cart.processor" priority="4901"/>
</service>

```

```auto
<?php declare(strict_types=1);

namespace Vendor\ModulName\Cart\Checkout;

use Shopware\Core\Checkout\Cart\Cart;
use Shopware\Core\Checkout\Cart\CartBehavior;
use Shopware\Core\Checkout\Cart\CartDataCollectorInterface;
use Shopware\Core\Checkout\Cart\CartProcessorInterface;
use Shopware\Core\Checkout\Cart\LineItem\CartDataCollection;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Shopware\Core\System\SalesChannel\SalesChannelContext;

class ConfiguratorCartHandler implements CartProcessorInterface
{
    

    public function process(CartDataCollection $data, Cart $original, Cart $toCalculate, SalesChannelContext $context, CartBehavior $behavior): void
    {
        // get all lineItem line items
        $lineItems = $toCalculate->getLineItems()->filterType(LineItem::PRODUCT_LINE_ITEM_TYPE);

        /** @var LineItem $lineItem */
        foreach ($lineItems as $lineItem) {
            
            // identify configurator items
            $payload = $lineItem->getPayload();
           
                $customOptions = $lineItem->getPayloadValue('customOptions');
                if(!empty($customOptions)) {
                    $lineItem->setPayloadValue('options', $customOptions);
                }
            }
        }
    }
    
}

```
