# Subscriber - getSubscribedEvents - Events herausfinden

**URL:** <https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879>\
**Category:** Programmierung\
**Created:** [6. Juni 2019 um 07:15 UTC](https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879 "2019-06-06T07:15:12Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)\
**Post date:** [6. Juni 2019 um 07:15 UTC](https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879/1 "2019-06-06T07:15:12Z")

</div>

Hallo,

mir ist das Subscriben auf die Events durch die Dokus noch nicht vollständig klar geworden. In der Doku finde ich auch nur zwei Beispiele, welche es mir nicht ganz erläutern.  
Ich habe daher verschiedene Fragen:

1. Wie kann ich die korrekten Events für mein Plugin herausfinden? Kann man die irgendwo in der Konsole sehen, oder muss ich mir diese dazu beispielsweise anhand der /Storefront/Page Struktur ableiten?
2. Wo findet man diesen hier: ProductEvents::PRODUCT\_LOADED\_EVENT Das ist ja kein reines Storefront Event, sondern könnte ja auch im Admininstrationsbereich sein.
3. Dieses Event (ProductPageCriteriaEvent::NAME) habe ich gefunden unter /Storefront/Page/Product. Wieso aber „::NAME“ dazu kommt weiß ich nicht…?
4. Kann jemand mal ein paar Beispiele aufzeigen, z.B.: ein Event das greift, sobald die Storefront aufgerufen wird und ein Event sobald ein Listing aufgerufen wird?

&nbsp;

---

<div class="post-metadata">

**Author:** ![Patrick\_Stahl](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/patrick_stahl/32/7679_2.png) [@Patrick\_Stahl](https://forum.shopware.com/u/Patrick_Stahl)\
**Post date:** [6. Juni 2019 um 08:51 UTC](https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879/2 "2019-06-06T08:51:37Z")

</div>

Moin @mdsw‍,

nicht mehr alles, was du in SW5 mit Events lösen musstest, muss nun in SW6 auch über Events geschehen. Viel läuft über das Decorator Pattern, viel über Tagged Services.  
Das hängt also stark davon ab, was du zu erreichen versuchst.

Ich versuche mal deine Fragen zu beantworten:

1. Es gibt ganze Klassen, die nur alle möglichen Events einer Entität auflisten, und es gibt einzelne Klassen, die ein Event selbst darstellen.  
Die Ersteren findest du, wenn du im Code nach “@Event” suchst.&nbsp;[Hier](https://github.com/shopware/platform/search?l=PHP&q=%5C%40Event) habe ich die Suche einmal für dich in GitHub ausgeführt.  
Die Letzteren findest du, indem du nach “extends NestedEvent” oder “extends Event” suchst. Auch [hier](https://github.com/shopware/platform/search?q=%22extends+Event%22&unscoped_q=%22extends+Event%22) und [hier](https://github.com/shopware/platform/search?q=%22extends+NestedEvent%22&unscoped_q=%22extends+NestedEvent%22)&nbsp;einmal die Suche dazu.
2. Im Zusammenhang mit der Antwort aus&nbsp; **1.:&nbsp;** Wenn du dir das Suchergebnis anschaust, siehst du, dass jedes Event einer Entität mit der @Event Annotation markiert ist. Diese zeigt auch an, wo das Event genutzt wird, in deinem Fall zum Beispiel in der Klasse [EntityLoadedEvent](https://github.com/shopware/platform/blob/master/src/Core/Framework/DataAbstractionLayer/Event/EntityLoadedEvent.php#L49). Hinter der Konstante “PRODUCT\_LOADED\_EVENT” steckt ja der String “product.loaded”. In der verlinkten Zeile siehst du, dass ein Event hier nach dem Muster “.loaded” gesucht wird. Heißt: Die werden dynamisch pro Entität (Produkte, Kunden, Kategorien, …) ausgeführt.  
  
Du hast aber Recht: Dieses Event wird auch in der Administration ausgeführt. **Immer** dann, wenn eine Produkt-Entität geladen wird. Das passiert sowohl in der Administration, als auch in der Storefront und der API.
3. Es gibt, wie oben beantwortet, Klassen, die ein Event selbst darstellen. Diese verfügen dann über eine “NAME” Konstante, die den eigentlichen Namen des Events beinhalten. So auch in diesem Fall.
4. Fürs Listing:&nbsp;[NavigationPageLoadedEvent](https://github.com/shopware/platform/blob/master/src/Storefront/Page/Navigation/NavigationPageLoadedEvent.php). Wegen der Storefront bin ich mir gerade nichz ganz sicher, aber das dürfte das hier sein:&nbsp;[StorefrontRenderEvent](https://github.com/shopware/platform/blob/master/src/Storefront/Event/StorefrontRenderEvent.php)

Hilft dir das irgendwie weiter?

Gruß,  
Patrick&nbsp; ![Shopware](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "Shopware")

---

<div class="post-metadata">

**Author:** ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)\
**Post date:** [6. Juni 2019 um 09:06 UTC](https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879/3 "2019-06-06T09:06:40Z")

</div>

Okay, es ist ein bisschen anders als in SW5, aber ich versuche mich da einzuarbeiten. Ohne Symfony wirklich zu kennen ist es als Webdesigner etwas schwierig bei dem ganzen Klassen- und Entitäten-Dschungel durchzublicken ![Undecided](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/8ae622c50104e84c5003fedfcc22572813a67b41.png "Undecided")

---

<div class="post-metadata">

**Author:** ![mdsw](https://avatars.discourse-cdn.com/v4/letter/m/94ad74/32.png) [@mdsw](https://forum.shopware.com/u/mdsw)\
**Post date:** [25. Juni 2019 um 20:18 UTC](https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879/4 "2019-06-25T20:18:05Z")

</div>

Okay, wie ich ein Event finde habe ich soweit begriffen.&nbsp;

1. Wenn ich jetzt ein Plugin global an das Rendern der Storefront binden möchte, wäre dann das Event&nbsp; **StorefrontRenderEvent** vergleichbar mit dem&nbsp; **Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend** aus SW5?

2. In den Dokus sind verschiedene Herangehensweisen

- zum einen steht&nbsp;in der Doku ([https://docs.shopware.com/en/shopware-platform-dev-en/how-to/register-subscriber](https://docs.shopware.com/en/shopware-platform-dev-en/how-to/register-subscriber)) dass man plump einen Subscriber Ordner erstellt und dort seine Subscriber reinwirft.  
Beispiel: /src/Subscriber/ProductPageCriteriaSubscriber.php
- In einer anderen Doku ([https://docs.shopware.com/en/shopware-platform-dev-en/getting-started/indepth-guide-bundle/storefront](https://docs.shopware.com/en/shopware-platform-dev-en/getting-started/indepth-guide-bundle/storefront))&nbsp;wird der Pfad zum Event praktisch auch in der Ordnerstruktur abgebildet.  
Beispiel:&nbsp;/src/Storefront/Page/Product/Subscriber/ProductPageCriteriaSubscriber.php

Ich weiß, dass es auf Grund der service.xml bums ist, in welchen Ordner ich den Subscriber lege…&nbsp;Prinzipiell gibt es hin und wieder auch Funktionen, welche für mehrere Subscriber gleich wären… dahingehend finde ich Variante aus Punkt 1 besser, da ich hier allgemeinere Suibscriber-Bezeichnungen wählen kann und mich auch auf ein Array an Events subscriben könnte…

---

<div class="post-metadata">

**Author:** ![Patrick\_Stahl](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/patrick_stahl/32/7679_2.png) [@Patrick\_Stahl](https://forum.shopware.com/u/Patrick_Stahl)\
**Post date:** [26. Juni 2019 um 06:07 UTC](https://forum.shopware.com/t/subscriber-getsubscribedevents-events-herausfinden/59879/5 "2019-06-26T06:07:20Z")

</div>

Moin @mdsw‍!

Bzgl 1.:  
Ich finde es schwierig hier Events zu vergleichen. Im **Groben** kann man das so sagen, ja.  
Es gibt natürlich trotzdem ein paar Unterschiede.

Bzgl. 2.: Prinzipiell freut es mich erstmal, gesehen zu haben, dass du selbst verstanden hast, dass es vollkommen egal ist, wo du deinen Subscriber hinlegst.

In Shopware 6 haben wir bewusst versucht, den Plugin-Herstellern möglichst viel Spielraum zu bieten. So ist es nun ja sogar auch möglich selbst zu entscheiden, wo die Plugin Base Class (früher die Bootstrap) liegt - man muss sie nur in der _composer.json_ entsprechend vermerken.  
Und ebenso ist das bei den Subscribern.

Wir haben intern beide Fälle hier und da abgedeckt.  
Die Kritierien waren meist relativ simpel:  
Hast du ein kleines überschaubares Plugin? Dann leg’ die Subscriber beispielsweise in einen&nbsp;_Subscriber_&nbsp;Ordner. Da hast du sie alle gesammelt.  
Ist dein Plugin jedoch riesig, hat Unmengen an Features und Bereichen, in denen es eingreift?  
Dann kann es Sinn ergeben, die Subscriber anderweitig aufzuteilen.  
Beispielsweise könnte es sein, dass du jede Menge im Checkout, und jede Menge auf der Detailseite änderst und für jeden Bereich 5-6 Subscriber hast.  
Da würde es ja Sinn ergeben, jeweils innerhalb des Bereiches, also Checkout / Detail, einen Subscriber Ordner zu haben.

Bevor du das anmerken willst: Mir ist bewusst, dass dies beim Bundle Plugin&nbsp; **nicht** &nbsp;der Fall ist.  
Da liegt der Subscriber jedoch in etwa in dem Ordner, in dem auch die Klasse liegt, die der Subscriber über Events anpasst.

Am Ende muss da jeder für sich selbst eine für sein Plugin sinnvolle Struktur finden.  
Das ist bestimmt auch eine Geschmackssache und alles hat Vor- und Nachteile.

Daher&nbsp;in kurz: Wie es für dein Plugin, deinen Anwendungsfall am Besten passt.

Gruß,  
Patrick&nbsp; ![Shopware](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "Shopware")&nbsp;  
&nbsp;
