Wie wenn nötig per Plugin den Bestell-Finish Prozess abbrechen?

Hallo Forum,

ich habe nun fast den ganzen Tag damit verbracht herauszufinden, wie ich eine Bestellung nach User-Interaktion “Zahlungspflichtig bestellen” notfalls noch abbrechen kann.
Hintergrund sind ein paar Custom-Attribute, die erfüllt sein müssen.

Lösungsansatz
a) Subscribe auf HOOK: Shopware_Controllers_Frontend_Checkout::finishAction::replace
    => dann meine Prüfroutinen, ob Bestellung gültig ist, falls nicht dann
    => per \Enlight_Hook_HookArgs $args->getSubject()->forward(‘confirm’) auf die Confirm-Page umleiten.

Geht leider nicht: Erzeugt eine Fehlermeldung a la Methode “::forward” nicht vorhanden…

b) Subscribe auf EVENT Enlight_Controller_Action_PreDispatch_Frontend_Checkout
    => dann meine Prüfroutinen, ob Bestellung gültig ist, falls nicht dann
    => per \Enlight_Controller_ActionEventArgs $args->getSubject()->forward(‘confirm’) auf die Confirm-Page umleiten.

Geht leider auch nicht. Fehlermeldung identisch…

Wie habe ich denn Zugriff auf die Controller Action forward?
Den Controller (zB Checkout) bekomme ich doch per $args->getSubject() oder?

Wäre Klasse wenn mir da jemand helfen kann.
Danke!

Hallo @yodolphe‍,

ja, dass Logic ist richtig , $args->getSubject()  => Checkout Controller und forword darf funktioniert, wenn nicht also gibt andere Probleme mit Ihre Code.

 

VG,

Tel.: +49 755 - 183 990 00 | Web: http://enbit.de/

1 „Gefällt mir“

 

ja, dass Logic ist richtig , $args->getSubject()  => Checkout Controller und forword darf funktioniert, wenn nicht also gibt andere Probleme mit Ihre Code.

Ja, dann ist wohl leider ein anderes Problem im Code - dummerweise habe ich das undokumentierte Plugin von jemand anderem übernommen. Dann werde ich wohl dessen Code debuggen müssen…

class Frontend implements SubscriberInterface { public static function getSubscribedEvents() { return array( ‚Shopware_Controllers_Frontend_Checkout::finishAction::before‘ => ‚onCheckoutFinishBefore‘ ); } public function onCheckoutFinishBefore(\Enlight_Hook_HookArgs $args) { $controller = $args->getSubject(); $testerrors = array(); $test = 1; if ($test = 1) { return $controller->forward( ‚confirm‘, null, null, [‚testErrors‘ => $testerrors] ); } } }

Vielleicht so ? :wink:

Hallo @yodorada‍

der Lösungsansatz b mit dem PreDispatch Event ist schon richtig. Auch solltest du über die Methode getSubject die Instanz des Controllers bekommen und somit auch die Methode „forward“ zur Verfügung haben. Wie lautet denn die Fehlermeldung konkret? Evtl. helfen dir auch diese Angaben, um an etwas aussagekräftigem zu kommen: https://community.shopware.com/Fehlermeldungen-in-Shopware-debuggen_detail_1880.html#Frontend_Error_Reporter

Viele Grüße aus Schöppingen

cool Michael Telgmann