Как переопределить перенаправление, установленное ранее при обработке запроса


Это беспокоило меня некоторое время, и я избегал этого, но время пришло! Часто при расширении основных функций 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, так как это такой ключевой класс...

Спасибо,
Джонатан

Author: Jonathan Day, 2011-02-16

1 answers

Zend_Controller_Response_Abstract имеет метод clearHeader

$this->getResponse()->clearHeader('Location');

Вам также придется переопределить код ответа:

$this->getResponse()->setHttpResponseCode(200);

Просто предположение из беглого взгляда на источник Zend_Controller_Response_Abstract предполагая, что в одном из дочерних классов не происходит никакой другой магии, это должно выполнить эту работу.

 2
Author: xzyfer, 2011-02-16 03:16:45