# Event Anfängerfrage

**URL:** <https://forum.shopware.com/t/event-anfangerfrage/48134>\
**Category:** Programmierung\
**Created:** [8. September 2017 um 09:29 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134 "2017-09-08T09:29:20Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Fensterscheibe](https://avatars.discourse-cdn.com/v4/letter/f/f4b2a3/32.png) [@Fensterscheibe](https://forum.shopware.com/u/Fensterscheibe)\
**Post date:** [8. September 2017 um 09:29 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134/1 "2017-09-08T09:29:20Z")

</div>

Guten Tag,

ich möchte, dass wenn ich im Backend eine Bestellung speicher, mein Event gefeuert wird.

Mit “Enlight\_Controller\_Action\_PostDispatchSecure\_Backend\_Order\_SaveAction”

funktioniert es leider nicht, wie schreibt man das sonst ?&nbsp;

MfG, Fensterscheibe

---

<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:** [8. September 2017 um 09:37 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134/2 "2017-09-08T09:37:44Z")

</div>

Moin @Fensterscheibe‍,

du hast hier genau zwei Möglichkeiten:

1. Event:&nbsp; **Enlight\_Controller\_Action\_PostDispatchSecure\_Backend\_Order**  
Bei diesem Event hängst du dich erstmal generell an den Order Controller, nicht an eine spezifische Action.  
Ergo: Dein Code wird für&nbsp; **jede** &nbsp;Action ausgeführt.  
Aushilfe:

Du liest dir die gewünschte Action aus und steigst aus, sofern die Action nicht deiner saveAction entspricht.  
**Beachte** : Der Code deines Events wird dann&nbsp; **nach** &nbsp;der originalen Action ausgeführt.

1. Event:&nbsp; **Enlight\_Controller\_Action\_Backend\_Order\_saveAction**  
Hier entfällt das “PostDispatchSecure” im Event Namen.  
Zu beachten gilt es hier: Dein Event wird&nbsp; **vor** &nbsp;der originalen Action ausgeführt.  
Du hast darüber hinaus die Möglichkeit die anschließende Ausführung der originalen Action zu verhindern, indem du in deinem Event Listener&nbsp; **true** zurückgibst.

Hilft dir das weiter?  
Ich habe das jetzt aus dem Kopf heraus und in Eile runtergetippert, verzeih’ mir also bitte eventuelle (Tipp-)Fehler.

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

---

<div class="post-metadata">

**Author:** ![Fensterscheibe](https://avatars.discourse-cdn.com/v4/letter/f/f4b2a3/32.png) [@Fensterscheibe](https://forum.shopware.com/u/Fensterscheibe)\
**Post date:** [8. September 2017 um 10:03 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134/3 "2017-09-08T10:03:47Z")

</div>

> [@Patrick Stahl schrieb:](https://forum.shopware.com/profile/1869/Patrick%20Stahl "Patrick%20Stahl")
> 
> Moin @Fensterscheibe‍,
> 
> du hast hier genau zwei Möglichkeiten:
> 
> 1. Event:&nbsp; **Enlight\_Controller\_Action\_PostDispatchSecure\_Backend\_Order**  
> Bei diesem Event hängst du dich erstmal generell an den Order Controller, nicht an eine spezifische Action.  
> Ergo: Dein Code wird für&nbsp; **jede** &nbsp;Action ausgeführt.  
> Aushilfe:
> 
> public function deinEventListener(Enlight\_Event\_EventArgs $args)  
> {  
> /\*\* @var Shopware\_Controllers\_Backend\_Order $controller \*/  
> $controller = $args-\>getSubject();  
> $request = $controller-\>Request();
> 
> if ($request-\>getActionName() !== ‚save‘) {  
> return;  
> }
> 
> // dein Code hier  
> }
> 
> Du liest dir die gewünschte Action aus und steigst aus, sofern die Action nicht deiner saveAction entspricht.  
> **Beachte** : Der Code deines Events wird dann&nbsp; **nach** &nbsp;der originalen Action ausgeführt.
> 
> 1. Event:&nbsp; **Enlight\_Controller\_Action\_Backend\_Order\_saveAction**  
> Hier entfällt das „PostDispatchSecure“ im Event Namen.  
> Zu beachten gilt es hier: Dein Event wird&nbsp; **vor** &nbsp;der originalen Action ausgeführt.  
> Du hast darüber hinaus die Möglichkeit die anschließende Ausführung der originalen Action zu verhindern, indem du in deinem Event Listener&nbsp; **true** zurückgibst.
> 
> Hilft dir das weiter?  
> Ich habe das jetzt aus dem Kopf heraus und in Eile runtergetippert, verzeih’ mir also bitte eventuelle (Tipp-)Fehler.
> 
> Gruß,  
> Patrick&nbsp;

Vielen Dank für die schnelle Antwort. Die zweite Variante funktioniert aber leider nicht :

```
 'onBeforeSaveAction'
			];
		}	
		
		
		public function OnBeforeSaveOrder(\Enlight_Event_EventArgs $args)
		{
			mail("hans.schmiodt125.de","Hook ist aktiv","test");
			return true;
		}
}

```

Wissen Sie, was die&nbsp;einfachste Möglichkeit ist, eine Ausgabe auf dem Bildschirm zu erzeugen z.B. eine alert box ?&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:** [8. September 2017 um 10:07 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134/4 "2017-09-08T10:07:27Z")

</div>

Moin @Fensterscheibe‍,

dein Event Listener hat einen anderen Namen als deine tatsächliche Methode.  
Dein Listener heißt&nbsp; **onBeforeSaveAction** , deine tatsächliche Methode heißt jedoch&nbsp; **onBeforeSaveOrder**.  
Dann dürfte es auch einwandfrei laufen! 🙂

Eine Alert-Box ist ja erstmal Javascript.  
Du kannst schlichtweg ein Echo zusammen mit einem Exit() verbinden - dann musst du dir die Response&nbsp;in der Browser Entwickler-Konsole anschauen.

```
echo "meine Ausgabe";
exit();

```

Hilft dir das?

Gruß,  
Patrick&nbsp; ![Shopware](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/shopware.png "Shopware")

---

<div class="post-metadata">

**Author:** ![Fensterscheibe](https://avatars.discourse-cdn.com/v4/letter/f/f4b2a3/32.png) [@Fensterscheibe](https://forum.shopware.com/u/Fensterscheibe)\
**Post date:** [8. September 2017 um 10:23 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134/5 "2017-09-08T10:23:33Z")

</div>

> [@Patrick Stahl schrieb:](https://forum.shopware.com/profile/1869/Patrick%20Stahl "Patrick%20Stahl")
> 
> Moin @Fensterscheibe‍,
> 
> dein Event Listener hat einen anderen Namen als deine tatsächliche Methode.  
> Dein Listener heißt&nbsp; **onBeforeSaveAction** , deine tatsächliche Methode heißt jedoch&nbsp; **onBeforeSaveOrder**.  
> Dann dürfte es auch einwandfrei laufen! 🙂
> 
> Eine Alert-Box ist ja erstmal Javascript.  
> Du kannst schlichtweg ein Echo zusammen mit einem Exit() verbinden - dann musst du dir die Response&nbsp;in der Browser Entwickler-Konsole anschauen.
> 
> echo „meine Ausgabe“;  
> exit();
> 
> Hilft dir das?
> 
> Gruß,  
> Patrick&nbsp; ![Shopware](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/shopware.png "Shopware")

Habe den Funktionsnamen nun angepasst, allerdings funktioniert es leider trotzdem nicht.

Den Benutzer möchte ich etwas anzeigen, also z.B. eine Box, wo steht „Fehlgeschlagen, es muss der Vorname hinterlegt werden“&nbsp;

---

<div class="post-metadata">

**Author:** ![Fensterscheibe](https://avatars.discourse-cdn.com/v4/letter/f/f4b2a3/32.png) [@Fensterscheibe](https://forum.shopware.com/u/Fensterscheibe)\
**Post date:** [25. September 2017 um 08:38 UTC](https://forum.shopware.com/t/event-anfangerfrage/48134/6 "2017-09-25T08:38:06Z")

</div>

> [@Patrick Stahl schrieb:](https://forum.shopware.com/profile/1869/Patrick%20Stahl "Patrick%20Stahl")
> 
> Moin @Fensterscheibe‍,
> 
> du hast hier genau zwei Möglichkeiten:
> 
> 1. Event:&nbsp; **Enlight\_Controller\_Action\_PostDispatchSecure\_Backend\_Order**  
> Bei diesem Event hängst du dich erstmal generell an den Order Controller, nicht an eine spezifische Action.  
> Ergo: Dein Code wird für&nbsp; **jede** &nbsp;Action ausgeführt.  
> Aushilfe:
> 
> public function deinEventListener(Enlight\_Event\_EventArgs $args)  
> {  
> /\*\* @var Shopware\_Controllers\_Backend\_Order $controller \*/  
> $controller = $args-\>getSubject();  
> $request = $controller-\>Request();
> 
> if ($request-\>getActionName() !== ‚save‘) {  
> return;  
> }
> 
> // dein Code hier  
> }
> 
> Du liest dir die gewünschte Action aus und steigst aus, sofern die Action nicht deiner saveAction entspricht.  
> **Beachte** : Der Code deines Events wird dann&nbsp; **nach** &nbsp;der originalen Action ausgeführt.
> 
> 1. Event:&nbsp; **Enlight\_Controller\_Action\_Backend\_Order\_saveAction**  
> Hier entfällt das „PostDispatchSecure“ im Event Namen.  
> Zu beachten gilt es hier: Dein Event wird&nbsp; **vor** &nbsp;der originalen Action ausgeführt.  
> Du hast darüber hinaus die Möglichkeit die anschließende Ausführung der originalen Action zu verhindern, indem du in deinem Event Listener&nbsp; **true** zurückgibst.
> 
> Hilft dir das weiter?  
> Ich habe das jetzt aus dem Kopf heraus und in Eile runtergetippert, verzeih’ mir also bitte eventuelle (Tipp-)Fehler.
> 
> Gruß,  
> Patrick&nbsp; ![Shopware](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/86c57fbace799dd4eb1f1b8a2d3bdc1733f0aea1.png "Shopware")

Die erste Möglichkeit funktioniert leider auch nicht bei mir, bei mir sieht es derzeit folgendermaßen aus :

```
 "test"
				];
				
			}
			
			public function test(\Enlight_Event_EventArgs $args)
			{
				exit();
			}
		
	}

```

&nbsp;Das ist nur zum testen, er müsste es ja direkt abbrechen.
