来自观察者的Magento重定向

时间:2013-05-14 05:04:13

标签: magento

我无法从观察者那里在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;

在使用观察者和控制器时,我不明白基本的重定向差异。

为什么在观察者中使用控制器重定向时不起作用。

请帮帮我解释一下。

提前多多感谢。

1 个答案:

答案 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调用,您的重定向将被忽略。返回调用会停止任何进一步的代码执行,并看到您的重定向被执行。