# LineItemCollection nicht modifizierbar?

**URL:** <https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528>\
**Category:** Programmierung\
**Created:** [6. Februar 2020 um 12:23 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528 "2020-02-06T12:23:21Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![mowlwurf](https://avatars.discourse-cdn.com/v4/letter/m/77aa72/32.png) [@mowlwurf](https://forum.shopware.com/u/mowlwurf)\
**Post date:** [6. Februar 2020 um 12:23 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/1 "2020-02-06T12:23:21Z")

</div>

Hallo zusammen,

wir brauchen für einen Kunden die Möglichkeit das gleiche Produkt in verschiedenen Konfigurationen in den Warenkorb zu legen. Der einzige Weg dies zu ermöglichen wäre die add Funktion der LineItemCollection dahingehend zu überschreiben, dass nicht mehr die ProduktId als Index für das Element verwendet wird, und die Prüfung ob die Id bereits vorhanden ist rauszuschmeißen.

```
//Original

public function add($lineItem): void
    {
        $this->validateType($lineItem);

        $exists = $this->get($lineItem->getId());

        if ($exists && $exists->getType() !== $lineItem->getType()) {
            throw new MixedLineItemTypeException($lineItem->getId(), $exists->getType());
        }

        if ($exists) {
            $exists->setQuantity($lineItem->getQuantity() + $exists->getQuantity());

            return;
        }

        $this->elements[$this->getKey($lineItem)] = $lineItem;
    }

// gewünschte Anpassung
public function add($lineItem): void
    {
        $this->validateType($lineItem);

        $exists = $this->get($lineItem->getId());

        $this->elements[] = $lineItem;
    }

```

Dies würde so auch wunderbar funktionieren (getestet via direkter Anpassung der Corefile). Allerdings gibt es meines Erachtens&nbsp;keine Möglichkeit die LineItemCollection&nbsp;&nbsp;zu dekorieren, ersetzen oder zu überschreiben, da diese kein Service ist, keinem Interface zugrunde liegt und außerdem überall wo sie verwendet wir direkt initialisiert wird (ohne Dependency Injection). Gibt es hier eine Möglichkeit dieses Verhalten zu beeinflußen (oder wird es dies geben)?

Was nicht funktioniert

- Template Anpassung um den LineItems key abzuändern -\> keine Auswirkung da&nbsp;in der LineItemCollection direkt auf getId() zugegriffen wird und nicht auf den Key
- Template o. JS Anpassung um die Id zu modifizieren -\> Produkt kann gar nicht mehr in den Warenkorb gelegt werden, weil nicht existent, zumal diese Id auch vom eigenen Code benötigt wird
- LineItemAddedEvent -\> kommt zu spät&nbsp;
- LineItem im Controller modifzieren -\> selbes Problem, Id muss die echte sein und dadurch wird das LineItem nur dem bestehenden „hinzugefügt“

Ich sehe keinen Weg der drumherum führt die LineItemCollection für dieses Vorhaben, welches meiner Meinung nach eine essentielle Funktionalität ist, anzupassen. Viele unserer Kunden benötigen diese Funktionalität zwingend. Eine Anpassung des Cores ist nicht gewünscht.

---

<div class="post-metadata">

**Author:** ![mowlwurf](https://avatars.discourse-cdn.com/v4/letter/m/77aa72/32.png) [@mowlwurf](https://forum.shopware.com/u/mowlwurf)\
**Post date:** [13. Februar 2020 um 11:43 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/2 "2020-02-13T11:43:54Z")

</div>

@Shopware braucht Ihr doch sicherlich auch für Euer CustomProducts Plugin, wenn es denn kommt 🙂

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [13. Februar 2020 um 11:47 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/3 "2020-02-13T11:47:37Z")

</div>

Bau doch einfach einen eigenen Controller 😉

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [13. Februar 2020 um 12:11 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/4 "2020-02-13T12:11:10Z")

</div>

Du machst eine Kopie des jetzigen Controllers, nimmst alle nicht relevanten methods raus, definierst eine neue Route&nbsp;und setzt an der entsprechenden Stelle eine Random-ID. Dazu noch die Anpassung im Twig-Template (Den Block für den LineItem-Controller ändern) und schon sollte es funktionieren.

Wenn jedoch die selbe Konfiguration gestackt werden soll, dann kann man ja anhand der Konfigration und der Produkt-ID einen md5 erzeugen und als ID nehmen.

&nbsp;

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [13. Februar 2020 um 12:13 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/5 "2020-02-13T12:13:57Z")

</div>

Und wieso muss die ID die echte sein? Man hat doch noch die Referenz-ID um auf das Ursprungsprodukt zuzugreifen.

---

<div class="post-metadata">

**Author:** ![Almare](https://avatars.discourse-cdn.com/v4/letter/a/a87d85/32.png) [@Almare](https://forum.shopware.com/u/Almare)\
**Post date:** [23. März 2020 um 18:54 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/6 "2020-03-23T18:54:57Z")

</div>

Ich habe exakt das gleiche Problem. Ein Hinweis aus dem Gitter Chat war eine neue UUID für den Container zu erzeugen (Container beinhaltet Hauptprodukt plus mein custom LineItem). Dann kann ich beliebig viele Artikel des gleichen Produkts in unterschiedlichen Konfigurationen hinzufügen. Das klappt alles ohne Controller überschreiben usw…

---

<div class="post-metadata">

**Author:** ![WernerBu](https://avatars.discourse-cdn.com/v4/letter/w/71c47a/32.png) [@WernerBu](https://forum.shopware.com/u/WernerBu)\
**Post date:** [22. April 2020 um 12:51 UTC](https://forum.shopware.com/t/lineitemcollection-nicht-modifizierbar/64528/7 "2020-04-22T12:51:02Z")

</div>

Hallo,

das Problem habe ich auch.

Welche der Vorschläge ist denn nun umsetzbar und empfehlenswert?

Denn Controller sozusagen zu überschreiben sollte ja an sich nicht nötig sein, wenn Shopware das durchdacht hat.

Bzw. wie habt ihr denn das nun letztendlich umgesetzt mowlwurf?

Gruß,

Werner.
