我无法从观察者那里在Magento中创建一个工作重定向。除此之外,我需要理解为什么像在控制器中那样的异常在Observer中不起作用。
控制器中执行的典型例外情况如下(adminhtml控制器)
$message = $this->__('Exception Message.');
Mage::getSingleton('adminhtml/session')->addError($message);
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
在博客的某处,我读到了以下从观察者重定向的方法。
Mage::getSingleton('core/session')->addError('Exception Message.');
Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'));
Mage::app()->getResponse()->sendResponse();
exit;
在使用观察者和控制器时,我不明白基本的重定向差异。
为什么在观察者中使用控制器重定向时不起作用。
请帮帮我解释一下。
提前多多感谢。
答案 0 :(得分:0)
见下面的链接,我也发布了代码 它可能对你有帮助。
来源:http://aaronbonner.io/post/418012530/redirects-in-magento-controllers
Magento控制器中的重定向 在Zend Framework控制器中,要输出除html之外的其他内容,您需要禁用ViewHelper默认值以及其他一些神奇的ZF通常编织。
在Magento中,执行控制器重定向时同样适用。
我注意到在PHP 5.2上似乎忽略了重定向,而我的Macports 5.3设置它有效。事实证明我错过了一个技巧,所以Magento的正确重定向如下:
在MyPackage/MyModule/controllers/MyController.php
:
$this->_redirectUrl($this->getUrl('http://www.someurl.com/someresource'));
$this->setFlag('', self::FLAG_NO_DISPATCH, true);
return $this;
如果没有setFlag调用,您的重定向将被忽略。返回调用会停止任何进一步的代码执行,并看到您的重定向被执行。