Controller Action ersetzen

Hallo,

gerade versuche ich mich an meinem ersten Shopware Plugin, ich bitte also etwas um Nachsicht :wink:

Ich möchte eine Action in einem Controller teilweise ersetzen.

Wie gehe ich hier genau vor?

Ich habe bereits das Event “subscribed” und die richtige Action in dem Controller gefunden. Hier möchte ich eigentlich zunächst einmal eine Zeile austauschen.

Gibt es eine möglichkeit den Code von der Funtion im Controller ins Plugin zu kopieren und dann nach Belieben anzupassen?

Vielen Dank im Vorraus,

Sebbo

Hi,

welches Event hast du gefunden? Das Controller-Replace-Event, das Action-Event oder einen Action-Replace-Hook? Oder ein PostDispatch-Event?

In allen Fällen kannst du nicht zeilenweise modifizieren. Im Falle des Replace Hooks kannst du mit $args->executeParent() die Original-Methode an beliebiger Stelle aufrufen. Theoretisch kannst du auch den Controller durch einen eigenen Controller ersetzen (via Event) und den wiederum vom ursprünglichen Controller erben lassen.

Ist so allgemein alles schwer zu sagen, was genau möchtest du denn erreichen?

Daniel

Es geht mir um die editAction des Address Controllers.

Der Hook hierzu (z.B. sAdmin::sUpdateBilling::AFTER) wurde leider mit Shopware 5.2 entfernt, deswegen stehe ich eigentlich vor diesem Problem.

Erreichen möchte ich am Ende, dass bei einer bestimmten Kundengruppe eine E-Mail bei Adressänderung geschickt wird und die Adresse nicht geändert wird, sondern eine Meldung angezeigt wird.

Vielen Dank für deine Hilfe!

Hi,

Also prinzipiell sollten Hooks das allerletzte Mittel sein, wenn man mit den Events, Decorators oder Replacements nicht mehr weiterkommt. Ich würde Dir empfehlen hier die Doku durchzulesen - vor allem die Events. Damit sollte die Lösung für Dich klarer werden.

Ich würde nachsehen, ob es für das Speichern der Adresse ein notifyUntil Event gibt. Mit dem könntest Du das vermutlich sehr elegant lösen.

Details gibt es hier:
https://developers.shopware.com/developers-guide/event-guide/

LG

Moin,

vielen Dank für deine Antwort.

Leider konnte ich kein passendes Event finden. 

Über das Event „Enlight_Controller_Action_PostDispatch_Frontend_Address“ konnte ich zwar die Action Edit beeinflussen. Diese beinhaltet aber sowohl die Anzeige des Formulars, als auch das Speichern. Diese editAction() müsste ich also überschreiben und den Teil, in der das Formular gespeichert wird, entfernen. Wie könte ich das schaffen?

Wäre es alternativ möglich, bei dem Model Customer/Address die jeweiligen Funktionen zu bearbeiten? z.B. die setCompany().

Danke für eure Hilfe!

Ich habe es mittlerweile geschafft, auf das Model Customer/Address zuzugreifen. Das klappt auch soweit, allerdings kann ich die Doctrine Funktionen dort nicht benutzen.

Da dies im Grunde eine ganz neue Frage ist, habe ich jetzt mal einen neuen Post eröffnet.
https://forum.shopware.com/discussion/39056/auf-doctrine-preupdateeventargs-zugreifen#latest