Falsche Event-Namen? Plugin-Funktionen werden nicht aufgerufen.

Hallo @rreimche‍,

ich versuche hier nochmal Licht ins Dunkle zu bringen.

Du nutzt “PreDispatch”  und “PostDispatch” Events, erkenntlich an dem folgenden Teil:
Enlight_Controller_Action_ PostDispatch _Frontend_Checkout

Diese Events können nicht mit einer Action versehen werden. _Enlight_Controller_Action_PostDispatch_Frontend_Checkout_Index _ist also kein valides Event in Shopware.

Du hast jetzt zwei Möglichkeiten, um dein Vorhaben dennoch umzusetzen:

  1. Du lässt, wie von @arnebecker‍ vorgeschlagen, das “PostDispatch” bzw. “PreDispatch” im Event weg:
    In diesem Fall könntest du eine Action mit angeben und würde in deinem Fall bspw. wiefolgt aussehen:
    Enlight_Controller_Action_Frontend_Checkout_Confirm

Hierbei gilt es jedoch zwei Punkte zu beachten.
Erstens, findet dieses Event  vor  der originalen Action statt - du kannst also nicht  auf das Verhalten der originalen Action reagieren, dein Code wird ja vorher aufgerufen.
Zweitens, wenn du bei diesen Events ein “return true” ausführst, wird die originale Action  garnicht  ausgeführt - du ersetzt quasi die originale Action.
Muss man wissen & beachten!

  1. Du greifst auf den Request selbst zu, der den Action-Namen kennt.
    In diesem Beispiel nutzt du also weiterhin die PostDispatch / PreDispatch Events, jedoch, wie erwähnt, ohne Action im Event Namen!
    Enlight_Controller_Action_PreDispatch_Frontend_Checkout

Nun kannst du in dem Event Listener den Controller auslesen und über diesen Controller dann auf das Request Objekt zugreifen.
Das Request Objekt kennt die aufgerufene Action, sodass du darauf reagieren kannst.
Viel Text, hier mal ein Beispiel:

 

public function onPreDispatchCheckout(\Enlight_Controller_ActionEventArgs $args)
{
    /* @var \Enlight_Controller_Action $subject */
    $controller = $args->getSubject();

    if ($controller->Request()->getActionName() === 'confirm') {
        // Tue Dinge, wenn die Action "confirmAction" war
    }
}

Übrigens:
Bei den PostDispatch Events gibt es noch  PostDispatchSecure Events - diese sind noch etwas sicherer und werden sicher nur ausgeführt, wenn kein Fehler aufgetreten ist und ein Template existiert.

Helfen dir diese Informationen weiter?

Gruß,
Patrick  Shopware

4 „Gefällt mir“