来自Observer的Magento Redirect始终有效

时间:2012-11-05 17:08:22

标签: php events magento newsletter

我无法从观察者那里在Magento中创建工作重定向。

据我所知,有许多事件使用它们获取响应对象(在$observer对象中)。 另一种方法是使用像

这样的东西
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));

正如伟大的艾伦风暴所提到的那样https://stackoverflow.com/a/4730200/1700048

不幸的是,这对我来说不起作用,即使我这样添加sendResponse()

Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse();

例如:

我想阻止某些电子邮件地址订阅简报。 因此,我为newsletter_subscriber_save_before事件创建了一个观察者。

在我的观察者方法中,我检查了一些案例,如果它们触发我想阻止保存新闻稿订阅。 我的计划是添加这样的错误:

Mage::getSingleton('checkout/session')->addError('Email is spam!');

然后让当前页面重新加载(显示错误消息),如上所示重定向(示例中的checkout/cart只是为了看它确实有用)。

不幸的是重定向不起作用。 为什么sendResponse在这种情况下不发送响应?

感谢您的帮助:)

4 个答案:

答案 0 :(得分:18)

这有效,但不是超级优雅:

Mage::getSingleton('core/session')->addError('Email is spam!');
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;

答案 1 :(得分:8)

我将简短并纠正Silas Palmer的代码。

Mage::getSingleton('checkout/session')->addError('Email is spam!');
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse();
exit;

希望这有助于某人!

答案 2 :(得分:0)

这应该可以正常工作:s

您是否尝试在setRedirect()电话后立即退出脚本,看看它是否肯定会到达那里?

答案 3 :(得分:0)

您是否考虑使用自己的自定义模块覆盖保存新闻字母控制器而不是创建Observer,而是在那里发送垃圾逻辑,然后在逻辑下面添加新闻字母代码。

您还可以将保存新闻信件的网址更改为新的自定义模块网址然后执行垃圾邮件过滤器,如果您认为它是有效的电子邮件,那么您可以在内部转发常规保存新闻信(请参阅{{3 }})

因此,从控制器

重定向时,您不会遇到任何问题