# Action des CheckoutControllers erweitern

**URL:** <https://forum.shopware.com/t/action-des-checkoutcontrollers-erweitern/848>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [26. November 2010 um 23:52 UTC](https://forum.shopware.com/t/action-des-checkoutcontrollers-erweitern/848 "2010-11-26T23:52:52Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://avatars.discourse-cdn.com/v4/letter/j/ce7236/32.png) [@jan](https://forum.shopware.com/u/jan)\
**Post date:** [26. November 2010 um 23:52 UTC](https://forum.shopware.com/t/action-des-checkoutcontrollers-erweitern/848/1 "2010-11-26T23:52:52Z")

</div>

Hallo, ich würde gerne die paymentAction des CheckoutControllers dahingehend erweitern, dass nach Ausführung dieser Action eigener Code ausgeführt wird. Ist das mit dem Event/Hooksystem von Shopware machbar? Dabei soll nach der paymentAction ein Api-Aufruf an ein externes System und im Fehlerfall ein Forward z.B. auf den Warenkorb gemacht werden. Ich habe es schon mittels folgendem Code versucht: $event = $this-\>createEvent( ‚Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_Checkout‘, ‚myEventHandler‘); $this-\>subscribeEvent($event); Allerdings wird hier der Code meines Eventhandlers schon VOR der paymentAction ausgeführt. Darüberhinaus habe ich auch keinen Weg gefunden, auf den Controller zuzugreifen und im Fehlerfall das entsprechende ‚forward‘ auszuführen. Ich habe den Code schon testweise ans Ende der Methode paymentAction eingefügt und es funktioniert so, wie ich mir das vorgestellt habe. Jetzt stellt sich mir die Frage, wir ich das ganze ohne Überschreiben des Basiscodes realisieren kann. Gruß Jan

---

<div class="post-metadata">

**Author:** ![TSchenk](https://avatars.discourse-cdn.com/v4/letter/t/779978/32.png) [@TSchenk](https://forum.shopware.com/u/TSchenk)\
**Post date:** [27. November 2010 um 04:02 UTC](https://forum.shopware.com/t/action-des-checkoutcontrollers-erweitern/848/2 "2010-11-27T04:02:09Z")

</div>

Hi, also ich würde da ehr ein Hook erstellen statt eines Events… Am besten schaust du dir mal das Bsp. an ([http://www.shopware.de/wiki/Beispiel-Pl … em\_ablegen](http://www.shopware.de/wiki/Beispiel-Plugins-Shopware-Developer-Schulung-20.11.2010%5C_detail%5C_572%5C_444.html#Example%5C_3:%5C_XML-Datei%5C_nach%5C_Bestellabschluss%5C_im%5C_Filesystem%5C_ablegen))… Viele Grüße Thomas

---

<div class="post-metadata">

**Author:** ![Jacko](https://avatars.discourse-cdn.com/v4/letter/j/4af34b/32.png) [@Jacko](https://forum.shopware.com/u/Jacko)\
**Post date:** [6. Dezember 2010 um 12:31 UTC](https://forum.shopware.com/t/action-des-checkoutcontrollers-erweitern/848/3 "2010-12-06T12:31:38Z")

</div>

Das Ganze würde dann so aussehen: $event = $this-\>createHook( ‘Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_Checkout’, ‘paymentAction’, ‘myPaymentAction’, Enlight\_Hook\_HookHandler::TypeAfter, 0 ); $this-\>subscribeHook($event); Musst dann noch entsprechend die Methode myPaymentAction erstellen. Durch den Typ TypeAfter wird die Methode danach ausgeführt.😉

---

<div class="post-metadata">

**Author:** ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)\
**Post date:** [7. Dezember 2010 um 12:31 UTC](https://forum.shopware.com/t/action-des-checkoutcontrollers-erweitern/848/4 "2010-12-07T12:31:29Z")

</div>

Hi, bitte dafür keinen Hook missbrauchen. Das geht auch mit einem Event. 😉 Im MVC-Konzept gibt es dafür eine PreDispatch-Methode. In Shopware gibt es dafür zusätzlich auch ein Event. Diesen gibt es in 2 Ausführungen. 1. “Enlight\_Controller\_Action\_PreDispatch” wird vor jeder Action ausgeführt. 2. “Enlight\_Controller\_Action\_PreDispatch\_#Module#\_#Controller#” wird nur vor Actions des angegebenen Module+Controller ausgeführt. In diesem Fall solltest du die 2. Ausführung verwenden: `<?php $event = $this->createEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout', 'onPreDispatch' ); $this-\>subscribeEvent($event); public static function onPreDispatch(Enlight\_Event\_EventArgs $args) { $request = $args-\>getSubject()-\>Request(); if($request-\>getActionName()!='payment') { // Nur bei der Payment-Action return; } if(true) { // Bei einem Fehler return $args-\>getSubject()-\>forward('confirm'); // Zur Bestätigungs-Seite weiterleiten } } ` Viele Grüße Heiner
