Manera confiable de redirigir a la última página

8

¿Hay alguna forma confiable en magento para redirigir a la última página?

Tengo un pequeño formulario que quiero redirigir a la página anterior si se produce un error.

El formulario se encuentra en la página del producto y se redirige a otra página cuando se completa con éxito. Sin embargo, me gustaría redirigir de nuevo a la página del producto si se produce un error.

Mi URL de acción es /my/module/submit

Además, cuando digo confiable, quiero decir que redirectRefererno se puede confiar en

Marty Wallace
fuente
1
¿RedirectReferer es lo suficientemente confiable como para que Adminhtml de Magento confíe bastante exclusivamente en los botones de retroceso?
philwinkle

Respuestas:

23

Magento se basa en el $_SERVER['HTTP_REFERER']valor para la lógica de redireccionamiento sin reparos; ver 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 no se contenta con confiar en él $_SERVER['HTTP_REFERER'], lo único que puede hacer es almacenar la URL visitada más recientemente en la sesión y crear un captador para este valor que maneja el caso cuando alguien navega directamente al sitio .

puntos de referencia
fuente