Un moyen fiable de rediriger vers la dernière page

8

Existe-t-il un moyen fiable dans magento de rediriger vers la dernière page.

J'ai un petit formulaire que je souhaite rediriger vers la page précédente en cas d'erreur.

Le formulaire se trouve sur la page du produit et redirige vers une autre page une fois rempli avec succès. Cependant, je voudrais rediriger vers la page du produit en cas d'erreur.

Mon URL d'action est /my/module/submit

Aussi quand je dis fiable, je veux dire qu'on redirectRefererne peut pas compter sur

Marty Wallace
la source
1
RedirectReferer est suffisamment fiable pour que l'Adminhtml de Magento puisse s'appuyer assez exclusivement sur les boutons de retour?
philwinkle

Réponses:

23

Magento s'appuie sur la $_SERVER['HTTP_REFERER']valeur de la logique de redirection sans scrupule; voir 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;
}

Si vous n'êtes pas content de vous y fier $_SERVER['HTTP_REFERER'], la seule chose que vous pouvez faire est de stocker l'URL la plus récemment visitée en session et de créer un getter pour cette valeur qui gère le cas où quelqu'un accède directement au site .

Benmarks
la source