# \[GELÖST\] Shopware 5.5 - executeParent()

**URL:** <https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679>\
**Category:** Programmierung\
**Created:** [18. August 2018 um 09:59 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679 "2018-08-18T09:59:20Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [18. August 2018 um 09:59 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/1 "2018-08-18T09:59:20Z")

</div>

Hallo liebe Shopware - Gemeinde,

ab Shopware 5.5 wurde ja die Funktion executeParent() umgebaut: „Changed the execution model of `replace` hooks to prevent multiple calls of the hooked method, if more than one `replace` hook on the same method exists and all of them call `executeParent()` once“. Leider gibt es dazu keinerlei Dokumentation, wie nun der Funktionsaufruf neu aussehen soll.

Früher (siehe Shopware Dokumentation: [Understanding the Shopware hook system](https://developers.shopware.com/blog/2015/06/09/understanding-the-shopware-hook-system/) und beispielsweise hier [https://forum.shopware.com/discussion/comment/208196/#Comment\_208196](https://forum.shopware.com/discussion/comment/208196/#Comment_208196) und hier&nbsp;[shopware-5/AddressCheck.php at master · PAYONE-GmbH/shopware-5 · GitHub](https://github.com/PAYONE-GmbH/shopware-5/blob/master/Frontend/MoptPaymentPayone/Subscribers/AddressCheck.php#L98) ):

```
$args->setReturn(
     $args->getSubject()->executeParent(
          $args->getMethod(),
          $args->getArgs()
     )
);

```

Die Umstellung erfolgte ja in der Datei „ProxyFactory“ (engine/Library/Enlight/Hook/), wo nun der hook execution context benötigt wird. Es kommt nämlich auch folgende Fehlermeldung:

```
Cannot execute parent without hook execution context for method ""

```

Der bisherige Umbau auf:

```
$args->setReturn(
     $args->getSubject()->executeParent(
          'Methodenname',
          [
               $args->getMethod(),
               $args->getArgs()
          ]
     )
);

```

scheint korrekt zu sein (es kommt dann die Fehlermeldung "Cannot execute parent without hook execution context for method „Methodenname“), nur wie muss die Methode für das&nbsp;Event sein, damit es auch wieder funktioniert? $args-\>getMethod() gibt null zurück.

Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [19. August 2018 um 11:55 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/2 "2018-08-19T11:55:20Z")

</div>

Könntest du bei dir Lokal&nbsp;[Fix variable and method name collisions in `Enlight_Hook_HookArgs` and generated hook proxy classes by svenmuennich · Pull Request #1634 · shopware/shopware · GitHub](https://github.com/shopware/shopware/pull/1634) nachpatchen und schauen ob es dann so funktioniert wie vorher?

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [19. August 2018 um 12:16 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/3 "2018-08-19T12:16:15Z")

</div>

Hallo Shyim,

erst einmal vielen lieben Dank für deine Antwort, wenigstens eine. Der Pull - Request ist doch bereits im Shopware 5.5 RC 1 drin (hab ich auch grad in den Dateien geprüft) und funktioniert leider somit auch nicht.

Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [19. August 2018 um 12:19 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/4 "2018-08-19T12:19:59Z")

</div>

Vielleicht verstehe ich dich falsch - aber du willst den parent aufrufen beim&nbsp;Shopware\_Modules\_Basket\_AddArticle\_Start notify until event?!  
Oder ich verstehe deine Frage (und wo das Problem ist) nicht.

Der einzige Unterschied zu vorher besteht darin, dass die parent Methode nun nicht mehr mehrfach ausgeführt wird, sondern durch das executeParent() evtl. ein anderer hook ausgeführt wird - der dann wiederum die originale Methode aufrufen kann - je nach Reihenfolge.

Viele Grüße

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [19. August 2018 um 12:26 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/5 "2018-08-19T12:26:41Z")

</div>

@[sschreier](https://forum.shopware.com/profile/18157/sschreier)&nbsp;der PR wurde nach der **5.5 RC1** gemergt

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [19. August 2018 um 12:27 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/6 "2018-08-19T12:27:54Z")

</div>

Hallo Eike,

vielen Dank für deine Antwort.

Das Event beschreibt sogar Daniel im Buch auf Seite 428: “Shopware\_Modules\_Basket\_AddArticle\_Start: Artikel wird in den Warenkorb gelegt. Abbruch möglich.” und deshalb wird es auch in vielen Plugins genutzt, wenn man beispielsweise verhindern möchte, das ein spezieller Artikel in den Warenkorb gelegt werden kann (auch Shopware selbst macht das ja in seinen Plugins und nutzt es dafür, ich glaube beispielsweise in SwagLiveShopping und anderen).

Da man ja aber nicht global das Legen eines Artikels in den Warenkorb verhindern möchte, möchte man ja für die Artikel, die weiterhin in den Warenkorb gelegt werden können (die also die eigenen Bedingungen nicht erfüllen), dass die eigentliche Funktion hinter dem Event wieder ausgeführt wird -\> executeParent (dazu kommt ja, da dieses Event eben auch oft für solche Zwecke verwendet wird und man durch executeParent ermöglichen würde, das Plugins untereinander durch das executeParent kompatibel sind).

Ich weiß nicht, ob es wirklich sinnvolle wäre, statt executeParent hier eher “return;” zu nutzen (weil dann würde ja das Event immer true sein und andere Plugins dann im Prinzip nicht mehr berücksichtigen). **Wie gesagt bis Shopware 5.4.6 hat das auch alles so funktioniert** - nur seid dieser Anpassung in Shopware Version 5.5.0 RC1 knallt es. Oder wie würde man sonst erreichen, dass das eigentliche Event ausgeführt wird (wenn die eigene Bedingung nicht erfüllt ist), außer mit executeParent (es geht ja hier allgemein darum und nicht nur um das notify-Event, man kann ja nicht immer return true; zurückgeben lassen, weil es ja nicht immer passen würde)?

Ich habe ja auch schon selbst versucht, anhand der Änderungen eine Lösung zu finden (siehe oben) - aber egal was ich probiert habe, es knallt immer wieder (siehe Fehlermeldungen oben).

Viele Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [19. August 2018 um 12:32 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/7 "2018-08-19T12:32:33Z")

</div>

> [@Shyim schrieb:](https://forum.shopware.com/profile/20792/Shyim "Shyim")
> 
> @[sschreier](https://forum.shopware.com/profile/18157/sschreier)&nbsp;der PR wurde nach der **5.5 RC1** gemergt

Hallo Shyim,

wie gesagt, ich habe das grad geprüft, ich habe in meinem Shopware 5.5 RC1 exakt die Änderungen auch drin, die hier aufgeführt sind: [Make sure one to one entities are encoded correctly by the JsonApiEncoder · Issue #1634 · shopware/shopware · GitHub](https://github.com/shopware/shopware/pull/1634/files) . Ich hatte mir das dort auch angesehen, deshalb hatte ich das schon vor dem Starten des Themas geprüft.

Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [19. August 2018 um 12:45 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/8 "2018-08-19T12:45:49Z")

</div>

Ok - dann habe ich dich nicht missverstanden.

Die Methode executeParent() ist nur für hooks und nicht für events.  
Siehe&nbsp;[Shopware events](https://developers.shopware.com/developers-guide/event-guide/#event-types)

Viele Grüße

---

<div class="post-metadata">

**Author:** ![netzperfekt](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/netzperfekt/32/7765_2.png) [@netzperfekt](https://forum.shopware.com/u/netzperfekt)\
**Post date:** [19. August 2018 um 13:29 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/9 "2018-08-19T13:29:23Z")

</div>

Ich mache es genau so, und es klappt auch in der 5.5 RC1 noch, gerade gestet.&nbsp;

Don’t ask me… vor allem ist es egal,&nbsp;_was_&nbsp;zurückgegeben wird, auch ein _return “nix”_ bricht die Ausführung ab.

```
public function onAddArticle(Enlight_Event_EventArgs $arguments)
    {
        $orderNumber = $arguments->getId();
        $articleId = Shopware()->Modules()->Articles()->sGetArticleIdByOrderNumber($orderNumber);
        if($articleId != null) {
            $article = Shopware()->Modules()->Articles()->sGetArticleById($articleId);
            if ($article['netzp_announced'] == 1) {
            	return false;
            }
        }
    }

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [19. August 2018 um 13:33 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/10 "2018-08-19T13:33:04Z")

</div>

Hallo netzperfekt,

danke auch für deine Antwort - berücksichtigst du gar nicht, was passiert, wenn netzp\_announced nicht 1 (gesetzt) ist (das ist ja das, worum es im Prinzip ja auch geht)?

Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![netzperfekt](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/netzperfekt/32/7765_2.png) [@netzperfekt](https://forum.shopware.com/u/netzperfekt)\
**Post date:** [19. August 2018 um 13:39 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/11 "2018-08-19T13:39:41Z")

</div>

bei != 1 soll der Artikel in den WK gelegt werden - es wird also die vorige Kette der Handler aufgerufen. Der Genauigkeit halber könnte natürich ein abschließendes&nbsp;_return_; stehen (_ohne!_&nbsp;Rückgabewert).

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [19. August 2018 um 13:44 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/12 "2018-08-19T13:44:46Z")

</div>

Hallo netzperfekt,

vielen Dank für dein Feedback - klingt plausibel, ich hatte mich schon gewundert, dass das bei dir ohne return; überhaupt funktioniert konnte, weil nur der Code von dir hätte ja dazu geführt, das man gar keinen Artikel mehr in den Warenkorb legen kann.

Dann wäre also in diesem Fall return; der Weg, den man nutzen sollte. Dann hat das im Prinzip meine Frage beantwortet, ich danke für die Antworten.

Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [19. August 2018 um 14:37 UTC](https://forum.shopware.com/t/gelost-shopware-5-5-executeparent/54679/13 "2018-08-19T14:37:01Z")

</div>

Siehe&nbsp;[shopware/EventManager.php at 5.4 · shopware/shopware · GitHub](https://github.com/shopware/shopware/blob/5.4/engine/Library/Enlight/Event/EventManager.php#L236)

Viele Grüße
