这让我困扰了一段时间,我已经避免了,但现在是时候了!通常在扩展核心Magento功能时,无论是使用Event-Observer模式还是通过覆盖控制器(仅在绝对必要时!),核心代码已经使用$this->getResponse()->setRedirect($url);
或类似设置重定向。
如果我想覆盖该行为并在当前请求/响应周期中呈现响应,我该如何取消设置或取消重定向?
将Zend_Controller_Response_Abstract
的类型层次结构查看为Mage_Core_Controller_Response_Http
的祖父母,clearHeaders()
的方法可以消除由Location
控制的setRedirect()
标头{1}}但显然它也会消灭任何其他标题。
更糟糕的情况是getHeaders()
,clearHeaders()
,然后使用setHeader()
遍历所有其他标题,但这看起来很痛苦。欢迎任何建议。
===============
的修改
正如@xzyfer所指出的,一些Magento版本中确实存在clearHeader()方法。对于仍在使用较旧代码库的客户,您会如何推荐实现此代码。我犹豫是否要覆盖Mage_Core_Controller_Response_Http
因为它是如此关键的一类...
谢谢,
乔纳森
答案 0 :(得分:2)
Zend_Controller_Response_Abstract
有一个clearHeader
方法
$this->getResponse()->clearHeader('Location');
您还必须覆盖响应代码:
$this->getResponse()->setHttpResponseCode(200);
快速查看Zend_Controller_Response_Abstract
的来源只是猜测,假设其中一个子类中没有其他魔法可以执行此任务。