Как переопределить перенаправление, установленное ранее при обработке запроса
Это беспокоило меня некоторое время, и я избегал этого, но время пришло! Часто при расширении основных функций Magento, будь то с использованием шаблона наблюдателя событий или путем переопределения контроллера (только в случае крайней необходимости!), основной код уже установил перенаправление с использованием $this->getResponse()->setRedirect($url);
или аналогичного.
Если я хочу переопределить это поведение и получить ответ в текущем цикле запроса/ответа, как я могу отменить или аннулировать перенаправление?
Просматривая иерархию типов до Zend_Controller_Response_Abstract
, которая является прародителем Mage_Core_Controller_Response_Http
, существуют методы для clearHeaders()
, которые уничтожили бы заголовок Location
, управляемый setRedirect()
, но, очевидно, он также уничтожит любые другие заголовки.
Худшим случаем было бы getHeaders()
, clearHeaders()
а затем повторите все остальные заголовки с помощью setHeader()
, но это кажется болезненным. Любые предложения приветствуются.
===============
РЕДАКТИРОВАТЬ
Как указал @xzyfer, Метод clearHeader() действительно существует в некоторых выпусках Magento. Для клиентов, все еще работающих со старыми кодовыми базами, как бы вы рекомендовали это реализовать. Я не решаюсь переопределить Mage_Core_Controller_Response_Http
, так как это такой ключевой класс...
Спасибо,
Джонатан
1 answers
Zend_Controller_Response_Abstract
имеет метод clearHeader
$this->getResponse()->clearHeader('Location');
Вам также придется переопределить код ответа:
$this->getResponse()->setHttpResponseCode(200);
Просто предположение из беглого взгляда на источник Zend_Controller_Response_Abstract
предполагая, что в одном из дочерних классов не происходит никакой другой магии, это должно выполнить эту работу.