Controller Vererben

Wie kann ich einen Controller in meinem Plug-in vererben, um seine Methode überschreiben zu können (damit die URL immer dieselbe bleibt)?

Willst das Controller Verhalten bis Action Ebene überschreiben ? Ich habe dies nicht probiert, aber vielleicht kann man ein Plugin ( FE ) anlegen und subscribeEvent() wie folgendes gestalten Analog zum Beispiel $this->subscribeEvent( ‚CONTROLLER_CLASS_NAME::ACTION_METHODE_NAME::replace‘, // oder before, after … DEINE_EIGENE_ACTION_METHODE )

Vielen Dank, Parker, für deine Antworten, leider „subscribe event“ als „hook“ ist in diesem Fall nicht geeignet, z.B wenn ich 50 Methoden einer Klasse ersetzt brauche, soll ich 50 subscribe events schreiben. Es sollte möglich sein, die Klasse zu vererben. Kann mir jemand helfen?

Dann müsstest du jede Anfrage an deinen eigenen Controller umleiten. Oder wie meinst du das?! Gruß

Dann kannst du eigene Frontend Controller registrieren eine Beispiel Umsetzung ist in Plugin SwagVariantsTab zu finden. ..... // Register frontend controller $this-\>subscribeEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_SwagVariantsTab', 'onGetFrontendController' ); ..... public function onGetFrontendController(Enlight\_Event\_EventArgs $arguments) { $this-\>Application()-\>Template()-\>addTemplateDir( $this-\>Path() . 'Views/' ); return $this-\>Path() . 'Controllers/Frontend/SwagVariantsTab.php'; }

Hallo, Ok, ich werde den neuen Frontend-Kontroller z.B. als SwagAccount registrieren, aber wie kann ich Shopware_Controllers_Frontend_Account vererben und alle seine Methoden überschreiben? Und wenn ich http://shopware.localhost/account besuche, möchte ich jede Methode, die ich geschrieben habe, von der SwagAccount-Klasse gelesen haben. class Shopware\_Controllers\_Frontend\_SwagAccount extends Shopware\_Controllers\_Frontend\_Account { public function indexAction() { var\_dump('indexAction'); parent::indexAction(); } } Ich möchte var_dump unter http://shopware.localhost/account sehen können. Ich weiss nicht, wie ich das klarrer auslegen kann :slight_smile:

Hi, einen Controller einfach zu ersetzen funktioniert in Shopware nicht. Du kannst jedoch einzelne Actions auf einem Controller abfangen. Hier gibt es dann einen Trick den du anwenden könntest um den Account Controller durch deinen Plugin Controller zu ersetzen. Dafür registrierst du dich auf dem PreDispatch Event des Account Controllers um fängst einfach die Request ab und leitest diese dann weiter an deinen Controller. $args-\>getSubject()-\>forward($$args-\>getSubject()-\>Request()-\>getActionName(), 'MeinController') Dadurch werden einfach alle Anfragen an den Account Controller an deinen weiter geleitet. Deinen eigenen Controller kannst du dann ganz einfach vom Account Controller über „extends“ ableiten. Hoffe das hilft dir weiter.