ich möchte die Methode Checkout.finishAction() mit meiner eigenen erstzen, dafür habe ich in meinem Plugin:
public static function getSubscribedEvents()
{
return [
'Shopware_Controllers_Frontend_Checkout::finishAction::replace' => 'insteadFinishAction'
];
}
Laut 5.2.3 des Shopware-Buches „Diese Events [Hooks] stehen in Shopware nur für bestimmte Klassen zur Verfügung, insbesondere für die Core-Klassen, Doctrine-Repositorys und Controller.“. Soweit ich verstehe, geht es hier um eine Controller-Klasse.
Trotzdem funktioniert das nicht. Ich weiß das, weil ich mit xdebugger debugge und anstatt meiner Methode zu Chckout.finishAction() komme.
was genau möchtest du denn erreichen? Ein Replace-Hook sollte immer das allerletze Mittel sein, wenn es wirklich gar nicht anders geht. Ich behaupte, dass man in 95% der Fälle keinen Replace-Hook braucht Man muss sich klar machen, dass man die komplette Shopware Logik dadurch aushebelt, man muss sicherstellen, dass man exakt die gleichen Template Variablen übergibt, die gleiche Logik ausführt etc pp.
Grundsätzlich sollten Controller mit PostDispatch oder PreDispatch Events erweitert werden. Siehe auch Shopware events
Naja, wenn die Core-Klassen aber hardcoded minimalistisch sind - bleibt einen ja nichts Anderes übrig, als ganze Funktionen zu überschreiben.
Stehe nämlich auch grad vor dem Problem, eine "fest-codierte-Unzulänglichkeit" zu ersetzen: shopware/sBasket.php at 5.3 · shopware/shopware · GitHub
In der Funktion kann man sich ja nicht einmal irgendwo „rein-Hooken“.
Da hilft mir kein dispatchen der Welt mehr weiter
Es geht darum, das Verhalten von Checkout.finishAction() zu ändern sowie Checkout/finish.tpl. In finishAction() habe ich keine Ereignisse gefunden, deshalbe wollte ich Hooks verwenden. Von der Nachteilen der replace-Hooks habe ich in Shopware-Buch gelesen, aber ich sehe hier keinen anderen Weg.
Danke dir für den Hint, dass „Grundsätzlich sollten Controller mit PostDispatch oder PreDispatch Events erweitert werden“. Ich lese jetzt den Artikel und dann vllt. sehe ich die Lösung. Oder nicht
@Michael_Telgmann, danke dir sehr, aber könntest du auch hier antworten, wenn du die Antwort weiß, warum bei mir Hooking dieser Methode nicht funktionieren?
für die Hooks werden Proxy Klassen benutzt, die einmal initial aufgebaut werden und dann sozusagen im Cache liegen. Evtl musst du hier einmal den kompletten Shopware Cache löschen oder von Hand den “production_123456789” Order unter var/cache löschen. Danach noch mal probieren.
I know hook is the last resort and the same funcation can not be hooked more than two times. However, I am still not successful to write a hook and test the same. So, I want to know a working example of Hook which i can test. Can you please help me.