Controller PreDispatch funktioniert nicht

Hallo,

ich muss die addAccessoriesAction im Checkout Controller ändern, damit alle bereits im Warenkorb befindlichen Artikel gelöscht werden, die über diese Funktion dann erneut zum Warenkorb hinzugefügt werden (ist ein spezieller Anwendungsfall).

Wenn ich die “$this->basket->sDeleteBasket();” im Core in der Action am Anfang einfüge, funktioniert das auch.

Mein Aufbau bisher:

  /**
 * @inheritdoc
 */
  public static function getSubscribedEvents()
  {
      return [
          'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => 'onPreDispatchCheckout'
      ];
  }

/**
 * @param \Enlight_Controller_ActionEventArgs $args
 */

  public function onPreDispatchCheckout(\Enlight_Event_EventArgs $args)
  {
    /** @var \Shopware_Controllers_Frontend_Checkout $controller */
     $controller = $args->get('subject');

    if ($controller->Request()->getActionName() === 'addAccessories') {
      $this->basket->sDeleteBasket();
    }

  }

Vielleicht kann mir jemand kurz auf die Sprünge helfen, danke!

Moin @Fezzzzy‍,

ich habe deinen Code einfach mal bei mir eingebaut und habe ihn quasi sofort ans Laufen bekommen, ohne eine Änderung daran.
Du hast das Plugin aber schon auch installiert und aktiviert, oder?

Nichtsdestotroz der Hinweis:
Die Action “addAccessoriesAction” wird im Standard nicht mehr ausgeführt. Sofern du da keine Änderungen an deinem Theme / Code vorgenommen hast, wird das auch bei dir der Fall sein. Entsprechend würde deine If-Bedingung dann nie “wahr” sein.
Falls du dich jetzt fragst, wie ich das dann erfolgreich getestet habe: Indem ich mein Theme so angepasst habe, dass die Action durchaus aufgerufen wird.

Bist du dir sicher, dass das die richtige Action für dein Vorhaben ist?

In Kurz gilt aber zu sagen: Dein Code als Solches ist korrekt. Ich glaube einfach, dass der Gedanke der Falsche ist.

Lieben Gruß
Shopware Patrick Stahl

Hallo [@Patrick Stahl](http://forum.shopware.com/profile/1869/Patrick Stahl “Patrick Stahl”)‍ ,

danke für Deine Rückmeldung!

Ich habe für einen speziellen Anwendungsfall, weil ich mehrere Artikel gleichzeitig in den Warenkorb hinzufügen muss, eine eigene sAddToBasket Form im Theme erstellt:

                    In den Warenkorb

Die Values werden beide mit doppeltem Semikolon “;;” getrennt.

Ich vermute, dass im Plugin bei mir irgendetwas nicht korrekt ist. Hier nochmal die komplette .php:

 'onPreDispatchCheckout'
      ];
  }


/**
 * @param \Enlight_Controller_EventArgs $args
 */
  public function onPreDispatchCheckout(\Enlight_Event_EventArgs $args)
  {
    /** @var \Shopware_Controllers_Frontend_Checkout $controller */
     $controller = $args->get('subject');

    if ($controller->Request()->getActionName() === 'addAccessories') {
      $this->basket->sDeleteBasket();
    }

  }


}

Es funktioniert wenn ich das Plugin deaktiviere und im Core selber die Funktion hinterlege.

Nachtrag: Beim aktivierten Plugin wie oben, erscheint folgender Fehler in der Console:
POST [meineURL].de/checkout/addArticle 500 (Internal Server Error)

Vielleicht findet sich da ja noch ein Fehler…

Vielen Dank! Fezzzzy