Hook funktioniert nicht: $args->getReturn() gibt NULL zurück

Hallo zusammen, ich habe leider ein kleines (oder eher größeres :)) Problem mit einem Hook, was ich verwenden möchte. Ich habe einen Hook erstellt und möchte auf die Ergebnisse der „parent“ Funktion zugreifen. Der Hook selbst ist so definiert: $hook1 = $this-\>createHook( 'Shopware\_Controllers\_Frontend\_Checkout', 'changeQuantityAction', 'onCheckout\_changeQuantityAction\_After', Enlight\_Hook\_HookHandler::TypeAfter, 0); $this-\>subscribeHook($hook1); Die Funtktion onCheckout_changeQuantityAction_After sieht so aus: static function onCheckout\_changeQuantityAction\_After(Enlight\_Hook\_HookArgs $args){ $ret = $args-\>getReturn(); Shopware()-\>Log()-\>log("onCheckout\_changeQuantityAction\_After!!", Zend\_Log::INFO); Shopware()-\>Log()-\>log($args-\>getReturn(), Zend\_Log::INFO); } Und diese Funktion gibt folgendes aus (wenn ich Anzahl der Artikel im Warenkorb ändere): [quote] onCheckout_changeQuantityAction_After!! NULL [/quote] Ich habe die Definition des Hooks mit Doku verglichen, scheint auf den ersten Blick richtig zu sein. Ich habe auch versucht andere Funktionen zu verwenden (wie z.B. $args->getName()) - das geht. aber mit getReturn() geht es nicht. Hätte vielleicht jemand einen Tipp für mich? Vielen Dank.

Hat sich erledigt, vielleicht hilft das jemanden: habe in den Sourcen nachgeschaut, die Funktion changeQuantityAction() hat keinen Rückgabewert.

Ja, diese Methode hat keinen Rückgabewert. Actions haben in Shopware nie einen Rückgabewert. Du kannast aber z.B. per “$args->getSubject()” auf den Controller zugreifen. Außerdem würde ich hier lieber einen Event verwenden, da das viel sauberer wäre. :slight_smile: $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PostDispatch\_Frontend\_Checkout\_changeQuantityAction', 'onPostDispatchChangeQuantityAction' ); $this-\>subscribeEvent($event); ... public static function onPostDispatchChangeQuantityAction(Enlight\_Event\_EventArgs $args) { var\_dump($args-\>getSubject()-\>getReuqest()-\>getPost()); die(); }

Cool, vielen Dank!! Kurze Frage: das Event „Enlight_Controller_Action_PostDispatch_Frontend_Checkout_changeQuantityAction“ ist nicht in der Liste hier: http://wiki.shopware.de/Event-Uebersich … 6_461.html Verstehe ich richtig, dass jede Action (in Checkout) ein Event in der Form hat: Enlight_Controller_Action_PostDispatch_Frontend_Checkout_ACTIONNAME ? Oder noch allgemeiner: Enlight_Controller_Action_PostDispatch_Frontend_MODUL_ACTIONNAME

Ja, genau. Aber die Definition lautet eher: Enlight_Controller_Action_PostDispatch_MODULE_CONTROLLER_ACTIONNAME außerdem gibt es dann noch: Enlight_Controller_Action_PreDispatch_MODULE_CONTROLLER_ACTIONNAME

Kann es sein, dass die o.g. Beispiele nicht funktionieren oder nicht für alles funktionieren? Ich habe versucht nach dem o.g. Schema folgendes Events zu definieren: $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout\_finishAction', 'onCheckout\_finishAction' ); $this-\>subscribeEvent($event); oder auch $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout\_finish', 'onCheckout\_finish' ); $this-\>subscribeEvent($event); oder sogar $event = $this-\>createEvent( 'Enlight\_Controller\_Action\_PreDispatch\_Frontend\_Checkout\_Finish', 'onCheckout\_finish' ); $this-\>subscribeEvent($event); Aber nichts davon wird ausgeführt. Ich habe eine andere Lösung gefunden, das würde mich aber trotzdem interessieren. Vielen Dank!

Hi, Beispiele dafür findest du hier: http://wiki.shopware.de/Event-Uebersich … ler-Events Das Event müsste daher eher “Enlight_Controller_Action_PreDispatch_Frontend_Checkout” lauten. Ein Aufteilung auf eine bestimmte Action muss man im Pre/Post-Dispatch selber machen. Heiner