Function eines Controller überschreiben

Ich würde gerne den AuthController überschreiben. Konkret: um den Update-Aufwand gering zu halten würde ich gerne nur die Function generateAccountRecovery überschreiben.

Hat schon jemand Erfahrung damit, wie ich das am besten mache?

Ich habe bisher Ansätze gesehen, die einen neuen Controller per Plugin einbinden und dann per Class extends AuthController die Funktion in einer neuen Klasse überschreiben.

Da ich weder in der Symfony- noch in der Shopware-Dokumentation etwas dazu finden, stelle ich die Frage einfach mal im Forum.

Danke für jeden konstruktiven Beitrag.

Hallo zusammen,

Bin noch etwas neu hier, das würde mich auch interessieren, ich finde aber bisher sehr wenig dazu.
Gibt es mittlerweile irgendwo eine gute Anleitung dazu?

Eigentlich müsste man nur die route überschreiben. Bei jedem Aufruf der route sollte dann deine Methode aufgerufen werden.

Viele Grüße

Danke für den Hinweis. Das probier ich dann mal aus :). Bzw. habe es gerade ausprobiert und sieht jetzt gut.

Falls hier nochmal jemand drüberliest, meine Stolpersteine und wichtigsten Takeaways waren folgende:

Aufpassen mit den Namespaces, welche in der composer.json definiert sind, die muss man natürlich überall durchziehen (eigentlich trivial aber übersieht man gerne, vor allem wenn jemand anderes das Plugin aufgesetzt hat, oder es lange her ist).

Zudem entspricht der Namespace nicht direkt dem Pfad, IDEs beispielsweise autocompleten einem aber gerne den Pfad aus dem Sourcecode. Sprich Namespace für Controller ist dann
CustomPlugin\Controller korrekterweise.
PHP-Storm z.B. schlägt aber CustomPlugin\src\Controller vor entsprechend dem Pfad im Code was aber falsch ist.

Typische Fehlermeldung wenn mit den Namespaces etwas nicht stimmt ist:

Compile Error: Cannot declare class <...>Controller\CustomCheckoutController , because the name is already in use

Den Service in der services.xml als public definieren und mit autowire versehen (wie oben beim Threadersteller). Je nachdem ob man mit xml oder yaml arbeitet unterscheidet sich natürlich der Aufbau / die Notation.
Sonst bekommt man entsprechende Fehlermeldungen. Dass der Service nicht public ist.

Ggf. muss man mehrere Funktionen überschreiben, wenn die Action eine private Funktion des Controllers nutzt muss man diese auch überschreiben / übertragen, da private und entsprechend nicht vererbt.

Ich musste am Ende Anpassungen an der routes.xml an der services.xml und ggf. am Namespace der composer.json vornehmen (bzw. diesen beachten). Und natürlich der Custom Controller selbst.

Vielleicht hilft das nochmal jemandem.
Viele Grüße

1 „Gefällt mir“