如何覆盖先前在请求处理中设置的重定向

时间:2011-02-16 02:59:40

标签: php zend-framework redirect magento response

这让我困扰了一段时间,我已经避免了,但现在是时候了!通常在扩展核心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因为它是如此关键的一类...

谢谢,
乔纳森

1 个答案:

答案 0 :(得分:2)

Zend_Controller_Response_Abstract有一个clearHeader方法

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

您还必须覆盖响应代码:

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

快速查看Zend_Controller_Response_Abstract的来源只是猜测,假设其中一个子类中没有其他魔法可以执行此任务。