来自Observer的Magento Redirect始终有效

Cel*_*ler 7 php events newsletter magento

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

据我所知,有许多事件得到了响应对象(在$observer对象中).另一种方法是使用类似的东西

Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Run Code Online (Sandbox Code Playgroud)

正如伟大的艾伦风暴在这里提到的/sf/answers/331114031/.

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

Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse();
Run Code Online (Sandbox Code Playgroud)

例如:

我想阻止一些电子邮件地址订阅时事通讯.因此我为newsletter_subscriber_save_before事件创建了一个观察者.

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

Mage::getSingleton('checkout/session')->addError('Email is spam!');
Run Code Online (Sandbox Code Playgroud)

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

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

感谢帮助 :)

小智 18

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

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


Lal*_*hik 8

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

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

希望这有助于某人!


Hug*_*ieW 0

那应该可以正常工作:s

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