7

我无法从观察者那里在 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

4 回答 4

20

这可行,但它不是超级优雅:

Mage::getSingleton('core/session')->addError('Email is spam!');
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
于 2013-02-13T07:23:07.733 回答
8

我将缩短并更正Silas Palmer的代码。

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

希望这对某人有帮助!

于 2013-12-18T07:34:27.117 回答
0

您是否考虑过使用自己的自定义模块覆盖保存新闻信函控制器,而不是创建观察者,并在那里发送垃圾邮件逻辑,然后在您的逻辑下方添加新闻信函代码。

您还可以将保存新闻信函的 url 更改为新的自定义模块 url,然后执行垃圾邮件过滤器,如果您认为这是一封有效的电子邮件,那么您可以内部转发到常规保存新闻信函(请参阅如何从另一个在magento?

因此,从控制器重定向不会有任何问题

于 2012-11-05T19:02:24.947 回答
0

那应该可以正常工作:s

您是否尝试在setRedirect()通话后立即退出脚本以查看它是否确实到达那里?

于 2012-11-05T17:15:19.333 回答