Magento重定向从观察者总是工作 [英] Magento Redirect from Observer that always works
问题描述
据我所知,有许多事件与他们获得了响应对象(<在 $ observer
对象中)。
另一种方法是使用像
Mage :: app() - > getResponse() - > ; setRedirect(法师::使用getURL( '结帐/购物车'));
如下所述 https://stackoverflow.com/a/4730200/1700048 由伟大的艾伦风暴。
不幸的是,这不适用于我,即使我添加 sendResponse()
这样:
Mage :: app ) - > GETRESPONSE() - > setRedirect(法师::使用getURL( '结帐/购物车')) - > 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();
退出;
I am having trouble to create a working redirect in Magento from an observer.
As far as I know there are many events that got the response object with them (in the $observer
object).
Another way would be to use something like
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
as mentioned here https://stackoverflow.com/a/4730200/1700048 by the great Alan Storm.
Unfortunately this does not work for me, even when I add sendResponse()
like this:
Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse();
For example:
I want to prevent some email addresses to newsletter subscription.
Therefore I created an observer for the newsletter_subscriber_save_before
Event.
In my observer method I check some cases and if they trigger I want to prevent the saving of the newsletter subscribtion. My plan was to add an error like this:
Mage::getSingleton('checkout/session')->addError('Email is spam!');
and just let the current page reload (showing the error message) with a redirect as seen above (checkout/cart
in the example is just to see it really works).
Unfortunately the redirect does not work.
Why does sendResponse
not send the response in this case?
Thanks for help :)
This works but it is not super elegant:
Mage::getSingleton('core/session')->addError('Email is spam!');
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
这篇关于Magento重定向从观察者总是工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!