Maneira confiável de redirecionar para a última página

8

Existe uma maneira confiável no magento para redirecionar para a última página.

Eu tenho um pequeno formulário que eu quero redirecionar para a página anterior se ocorreu um erro.

O formulário fica na página do produto e redireciona para outra página quando concluído com êxito. No entanto, eu gostaria de redirecionar de volta para a página do produto se ocorrer um erro.

Meu URL de ação é /my/module/submit

Além disso, quando digo confiável, quero dizer que redirectReferernão posso confiar

Marty Wallace
fonte
11
RedirectReferer é confiável o suficiente para o Adminhtml do Magento confiar exclusivamente em botões de retorno?
philwinkle

Respostas:

23

O Magento depende do $_SERVER['HTTP_REFERER']valor da lógica de redirecionamento sem receio; veja 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 você não está contente com o conteúdo $_SERVER['HTTP_REFERER'], a única coisa que você pode fazer é armazenar o URL visitado mais recentemente na sessão e criar um getter para esse valor que lida com o caso quando alguém navega diretamente no site .

benmarks
fonte