Как я могу перенаправить из Observer с Magento

Я использую Observer, чтобы поймать это событие: controller_action_postdispatch_checkout_onepage_saveBilling

Я хочу это событие, чтобы проверить платежный адрес клиента.

Мой вопрос: как я могу отправить сообщение пользователю в этот момент. Когда нажата кнопка «Продолжить».

Я использовал: Mage::getSingleton('core/session')->addError('My message');

но сообщение не показывается пока не обновишь страницу. И вот второй вопрос. Как я могу перенаправить страницу с этой точки? Мне не повезло: $this->_redirect('*/*/'); и жестко закодированные URL-адреса не повезло. В идеале я хочу, чтобы, когда клиент нажимает кнопку «Продолжить», после некоторых проверок, которые я делаю, процесс должен быть остановлен с сообщением. Наблюдатель проверен, и он работает так, как должен работать.

Надеюсь смысл есть..

EDIT Это мой код. Просто чтобы убедиться, что я делаю это правильно: Модель/Наблюдатель

class Company_Restrictions_Model_Observer {

    public function notifyUser($observer) {
//Lot's off lines are tested here.Nothing seems to work..
$observer->getRequest()->setParam('return_url','http://www.google.com/');

}
}

config.xml

<?xml version="1.0"?>

<config>
  <modules>
      <Company_Restrictions>
          <version>0.1.0</version>
      </Company_Restrictions>
  </modules>
  <global>
    <models>
        <company_restrictions>
             <class>Company_Restrictions_Model</class>
        </company_restrictions>
    </models>
    <helpers>
        <company_restrictions>
             <class>Company_Restrictions_Helper</class>
        </company_restrictions>
    </helpers>
    <events>
      <controller_action_postdispatch_checkout_onepage_saveBilling>
        <observers>
          <notify_user>
            <type>singleton</type>
            <class>Company_Restrictions_Model_Observer</class>
            <method>notifyUser</method>
          </notify_user>
        </observers>
      </controller_action_postdispatch_checkout_onepage_saveBilling>     
    </events>
  </global>
</config>

РЕДАКТИРОВАТЬ ПОВТОРНО

После отладки я обнаружил, что многие функции выдают мне метод error.Undefined... например: _redirect() или Response() или Body().. Кто-нибудь знает, почему??


person vbak    schedule 26.11.2013    source источник


Ответы (4)


Взгляните на @ Magento — перенаправление клиента из метода наблюдателя

public function moduleMethod(Varien_Event_Observer $observer)
{
    $observer->getRequest()->setParam('return_url','http://www.google.com/');
}
person Renon Stewart    schedule 26.11.2013
comment
Все еще не работает. Есть ли проблема с событием, которое я пытаюсь поймать? - person vbak; 27.11.2013

У меня есть наблюдатель, который успешно перенаправляет, и я просто использую метод setRedirect:

public function moduleMethod(Varien_Event_Observer $observer)
{
    // get the current front controller
    $frontController = $observer->getEvent()->getFront();

    if(.....)
    {           
         $newUrl = ...;

         $frontController->getResponse()->setRedirect($newUrl);
         Mage::app()->getResponse()->sendResponse();
         exit;
    }
}
person Frank    schedule 27.11.2013

Просто для справки я дам вам ответ, который я получил от stackoverflow magento, который работает: вот как мне удалось заставить его работать.

$controllerAction = $observer->getEvent()->getControllerAction();
$result = array();
$result['error'] = '-1';
$result['message'] = 'YOUR MESSAGE HERE';
$controllerAction->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));

Magento Stackoverflow

person vbak    schedule 28.11.2013

Этот код будет работать:

$url = YOUR_URL; // e.g. Mage::getUrl('customer/account/login')
Mage::app()->getResponse()
            ->setRedirect($url)
            ->sendResponse();
person Mukesh Chapagain    schedule 20.02.2017