Magento: Erweiterung der Kunden-Account-Controller zum hinzufügen von Aktionen zu den Passwort vergessen Schritten
Wir versuchen ein paar Aktionen zu dem AccountController zum hinzufügen einer weiteren Aktion nach dem forgotpasswordpost Aktion. Das problem ist, wenn wir fügen Sie die Aktion, um die preDispatch logict, um sicherzustellen, dass Sie nicht eingeloggt sein müssen, der es immer noch leitet zurück auf die login-Seite.
public function preDispatch()
{
//a brute-force protection here would be nice
parent::preDispatch();
if (!$this->getRequest()->isDispatched()) {
return;
}
$action = $this->getRequest()->getActionName();
if (!preg_match('/^(create|login|logoutSuccess|forgotpassword|forgotpasswordpost|confirm|confirmation|newactionhere)/i', $action)) {
if (!$this->_getSession()->authenticate($this)) {
$this->setFlag('', 'no-dispatch', true);
}
} else {
$this->_getSession()->setNoReferer(true);
}
}
Funktioniert das nicht, weil wir den Aufruf der parent zuerst die läuft auch, aber natürlich ist das preg_match nicht mit dem übereinstimmt, und es läuft die authenticate-Methode, die läuft über die Methode $action->getResponse()->setRedirect($url) was natürlich legt die Kopfzeile und wenn es dann zurück zu unserem code ist es egal, und dann umleitet.
Könnten wir entfernen Sie einfach den Anruf an die Eltern, aber ich bin nicht sicher, dass ist der beste Ansatz, da die Eltern anrufen, die Ihre Eltern, wie gut die läuft noch ein paar Sachen, setzen Sie die layout-Fläche und dann ruft auch die übergeordnete Methode. Ich dachte, rufen Sie die Eltern mit Mage_Core_Controller_Front_Action war aber nicht sicher, das war der richtige Ansatz entweder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also das ist, was wir haben, haben wir die fahne und überprüft, ob die Aktion hatte die fahne von no-Versand. dann haben wir unset es, räumte der Kopfzeile und setzen Sie den response-code ein.
Ich brauchte etwas zu tun, was anderes,
I ended up skipping die ursprüngliche Implementierung der preDispatch des Mage_Customer_AccountController.
also in meinem übergeordneten Klasse, ich habe:
public function validActions() {
return 'erstellen|login|logoutSuccess|forgotpassword|forgotpasswordpost|bestätigen|Bestätigung|mynewaction';
}
wie Sie sehen können habe ich auch noch einen validActions() gibt eine pipe getrennte Liste von Aktionen, so wenn jemand will, um zu überschreiben, mein eigener code wird es viel einfacher, um eine andere Aktion.
Ich habe es wie folgt
1) Überschrieben, die Funktion preDispatch
2) und ersetzt die code parent::preDispatch(); mit Mage_Core_Controller_Front_Action::preDispatch(); . Seine arbeiten fein jetzt .Aber nicht sicher, ob dies die richtige Methode .
parent::preDispatch();
eigentlich tut. Ich empfehle es zuerst, aber dann lieber ersetzen mitMage_Core_Controller_Front_Action::preDispatch();
wie Sie vorgeschlagen.Schlage ich vor, dass Sie ein Beobachter auf
postDispatch
, filter füraccountController
und legen Sie dann die_redirect
. Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.