Intereting Posts
Вырезать пробелы внутри переменной в PHP PHP-запись в csv из массива Magento и настраиваемые атрибуты продукта Как реализовать API Gmail OAuth для отправки электронной почты (особенно через SMTP)? php – многошаговая форма с загрузкой файла Множественные (oneToMany) Entities образуют генерацию с symfony2 и загрузку файлов личное сообщение с использованием websockets Как извлечь последовательность чисел из массива? Выбор пути к папке с использованием файла типа ввода Что происходит, когда сервер находится в бесконечном цикле и клиент останавливается? Отсутствие строк при запросе таблицы с помощью Doctrine (Symfony2) XMLReader – как обрабатывать незадекларированное пространство имен PHP правильный способ совместного использования классов db connect и vars config с другими классами Проблема WSDL с объектами PHP, странные элементы <SOAP-ENC: Struct> Более элегантный способ разбора встроенных переменных в строках

Magento Redirect from Observer, который всегда работает

У меня возникли проблемы с созданием рабочей переадресации в Magento от наблюдателя.

Насколько я знаю, есть много событий, которые получили объект ответа с ними (в объекте $observer ). Другой способ – использовать что-то вроде

 Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart')); 

как упоминалось здесь https://stackoverflow.com/a/4730200/1700048 великим Аланом Штормом.

К сожалению, это не работает для меня, даже когда я добавляю sendResponse() следующим образом:

 Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/cart'))->sendResponse(); 

Например:

Я хочу запретить некоторые адреса электронной почты в подписке на рассылку новостей. Поэтому я создал наблюдателя для события newsletter_subscriber_save_before .

В моем методе наблюдателя я проверяю некоторые случаи, и если они срабатывают, я хочу предотвратить сохранение подписки на рассылку новостей. Мой план состоял в том, чтобы добавить ошибку:

 Mage::getSingleton('checkout/session')->addError('Email is spam!'); 

и просто пусть текущая страница перезагрузится (показывая сообщение об ошибке) с переадресацией, как показано выше ( checkout/cart в примере – это просто посмотреть, как это работает).

К сожалению, перенаправление не работает. Почему sendResponse не отправляет ответ в этом случае?

Спасибо за помощь 🙂

Это работает, но это не очень элегантно:

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

Я собираюсь кратко и исправить код Силаса Палмера .

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

надеюсь, это поможет кому-то!

Вместо того, чтобы создавать Observer, подумайте о том, как переопределить контроллер писем с сохранением в своем собственном модуле, и там вы создаете спам-логику, а затем добавляете код новостей под своей логикой.

Вы также можете изменить URL-адрес для сохранения новостного письма на новый URL-адрес модуля, а затем создать свой спам-фильтр, и если вы считаете, что это действительный адрес электронной почты, вы делаете внутреннюю переадресацию на регулярное письмо с сохранением новостей (см., Как вызвать одно действие из другой в пурпуре? )

Поэтому у вас не было бы проблем с перенаправлением с контроллера

Это должно хорошо работать: s

Вы пробовали просто выйти из сценария сразу после setRedirect() чтобы убедиться, что он определенно туда попал?