Magento重定向从观察者总是工作 [英] Magento Redirect from Observer that always works

查看:165
本文介绍了Magento重定向从观察者总是工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



据我所知,有许多事件与他们获得了响应对象(<在 $ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆