Zuverlässige Möglichkeit, zur letzten Seite umzuleiten

8

Gibt es in Magento eine zuverlässige Möglichkeit, zur letzten Seite umzuleiten?

Ich habe ein kleines Formular, das ich auf die vorherige Seite umleiten möchte, wenn ein Fehler aufgetreten ist.

Das Formular befindet sich auf der Produktseite und wird nach erfolgreichem Abschluss auf eine andere Seite weitergeleitet. Ich möchte jedoch bei einem Fehler zur Produktseite zurückkehren.

Meine Aktions-URL lautet /my/module/submit

Auch wenn ich zuverlässig sage, meine ich, dass redirectRefererman sich nicht darauf verlassen kann

Marty Wallace
quelle
1
RedirectReferer ist zuverlässig genug für Magentos Adminhtml, um sich ziemlich ausschließlich auf Zurück-Schaltflächen zu verlassen?
Philwinkle

Antworten:

23

Magento verlässt sich auf den $_SERVER['HTTP_REFERER']Wert für die Umleitungslogik ohne Bedenken. siehe Mage_Core_Controller_Varien_Action:

/**
 * Set referer url for redirect in responce
 *
 * @param   string $defaultUrl
 * @return  Mage_Core_Controller_Varien_Action
 */
protected function _redirectReferer($defaultUrl=null)
{

    $refererUrl = $this->_getRefererUrl();
    if (empty($refererUrl)) {
        $refererUrl = empty($defaultUrl) ? Mage::getBaseUrl() : $defaultUrl;
    }

    $this->getResponse()->setRedirect($refererUrl);
    return $this;
}

/**
 * Identify referer url via all accepted methods (HTTP_REFERER, regular or base64-encoded request param)
 *
 * @return string
 */
protected function _getRefererUrl()
{
    $refererUrl = $this->getRequest()->getServer('HTTP_REFERER');
    if ($url = $this->getRequest()->getParam(self::PARAM_NAME_REFERER_URL)) {
        $refererUrl = $url;
    }
    if ($url = $this->getRequest()->getParam(self::PARAM_NAME_BASE64_URL)) {
        $refererUrl = Mage::helper('core')->urlDecode($url);
    }
    if ($url = $this->getRequest()->getParam(self::PARAM_NAME_URL_ENCODED)) {
        $refererUrl = Mage::helper('core')->urlDecode($url);
    }

    if (!$this->_isUrlInternal($refererUrl)) {
        $refererUrl = Mage::app()->getStore()->getBaseUrl();
    }
    return $refererUrl;
}

Wenn Sie sich nicht damit zufrieden geben möchten $_SERVER['HTTP_REFERER'], können Sie nur die zuletzt besuchte URL in der Sitzung speichern und einen Getter für diesen Wert erstellen, der den Fall behandelt, wenn jemand direkt zur Site navigiert .

Benmarks
quelle