繁体   English   中英

来自Observer的Magento Redirect始终有效

[英]Magento Redirect from Observer that always works

我无法从观察者那里在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在这种情况下不发送响应?

感谢帮助 :)

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

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

我将简短并纠正塞拉斯帕尔默的代码。

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

希望这有助于某人!

这应该工作正常:s

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM