Надежный способ перенаправить на последнюю страницу

8

Есть ли надежный способ в magento для перенаправления на последнюю страницу.

У меня есть небольшая форма, которую я хочу перенаправить на предыдущую страницу, если произошла ошибка.

Форма находится на странице продукта и перенаправляет на другую страницу после успешного завершения. Тем не менее, я хотел бы перенаправить обратно на страницу продукта, если произошла ошибка.

URL моего действия /my/module/submit

Также, когда я говорю «надежный», я имею в виду, что на него redirectRefererнельзя положиться

Марти Уоллес
источник
1
RedirectReferer достаточно надежен, чтобы Adminhtml в Magento полагался исключительно на кнопки возврата?
Philwinkle

Ответы:

23

Magento полагается на $_SERVER['HTTP_REFERER']значение для логики перенаправления без сомнений; увидеть 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;
}

Если вы не можете полагаться на контент $_SERVER['HTTP_REFERER'], единственное, что вы можете сделать, - это сохранить последний посещенный URL-адрес в сеансе и создать метод получения этого значения, который обрабатывает случай, когда кто-то переходит непосредственно на сайт .

benmarks
источник