Modo affidabile per reindirizzare all'ultima pagina


8

Esiste un modo affidabile in Magento per reindirizzare all'ultima pagina.

Ho un piccolo modulo che voglio reindirizzare alla pagina precedente se si è verificato un errore.

Il modulo si trova sulla pagina del prodotto e reindirizza a un'altra pagina una volta completato correttamente. Tuttavia, vorrei reindirizzare nuovamente alla pagina del prodotto se si è verificato un errore.

Il mio URL di azione è /my/module/submit

Anche quando dico affidabile, intendo dire che non si redirectRefererpuò fare affidamento


1
RedirectReferer è abbastanza affidabile per Adminhtml di Magento da fare affidamento piuttosto esclusivamente sui pulsanti Indietro?
Filwinkle,

Risposte:


23

Magento si basa sul $_SERVER['HTTP_REFERER']valore per la logica di reindirizzamento senza scrupoli; vedi 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;
}

Se non sei contento di fare affidamento su $_SERVER['HTTP_REFERER'], l'unica cosa che puoi fare è archiviare l'URL visitato più di recente in sessione e creare un getter per questo valore che gestisca il caso quando qualcuno accede direttamente al sito .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.