2013-05-14 5 views
1

У меня возникли проблемы с созданием рабочей переадресации в Magento от наблюдателя. Из этого я должен понять, почему исключение, подобное тому, как мы делаем в контроллере, не работает в Observer.Magento Redirect from 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

Я думаю, что это то, что вы ищете: http://stackoverflow.com/questions/9749005/magent-redirect-customer-from-observer-method – JNDPNT

+0

$ observer-> getRequest() -> setParam (' RETURN_URL», 'HTTP: //www.google.com/'); Вышеприведенный код из ссылочного URL не работает. – Slimshadddyyy

+0

О: $ this-> getResponse() -> setRedirect ($ returnUrl); (вместо getFrontController()) – JNDPNT

ответ

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, ваш редирект будет игнорироваться. Обратный вызов останавливает дальнейшее выполнение кода и видит, что ваше перенаправление получает действие.