php events magento newsletter

php - Magento Redirect from Observer que siempre funciona



events newsletter (4)

En lugar de crear un Observer, ¿ha pensado en anular el controlador de guardar noticias con su propio módulo personalizado y hacer una lógica de spam allí y luego agregar el código de la carta de noticias debajo de su lógica.

También puede cambiar la url para guardar una nueva carta en una nueva url de módulo personalizado y luego hacer su filtro de spam y si cree que es un correo electrónico válido, entonces realiza un reenvío interno a la carta de guardar noticias (vea cómo llamar a una acción desde otro en magento? )

Por lo tanto, no tendría problemas para redirigir desde un controlador

Tengo problemas para crear una redirección de trabajo en Magento de un observador.

Hasta donde sé, hay muchos eventos que obtuvieron el objeto de respuesta con ellos (en el objeto $observer ). Otra forma sería usar algo como

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

como se menciona aquí https://stackoverflow.com/a/4730200/1700048 por el gran Alan Storm.

Lamentablemente, esto no funciona para mí, incluso cuando agrego sendResponse() esta manera:

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

Por ejemplo:

Quiero evitar algunas direcciones de correo electrónico para la suscripción al boletín informativo. Por lo tanto, creé un observador para el newsletter_subscriber_save_before evento.

En mi método de observación, verifico algunos casos y si se activan, quiero evitar que se guarde la suscripción al boletín informativo. Mi plan era agregar un error como este:

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

y simplemente deje que la página actual vuelva a cargar (mostrando el mensaje de error) con un redireccionamiento como se ve arriba (el proceso de checkout/cart en el ejemplo es solo para ver que realmente funciona).

Lamentablemente, la redirección no funciona. ¿Por qué sendResponse no envía la respuesta en este caso?

Gracias por la ayuda :)


Eso debería funcionar bien: s

¿Has intentado salir del guión inmediatamente después de la llamada a setRedirect() para ver si definitivamente está llegando?


Esto funciona, pero no es súper elegante:

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


Voy a abreviar y corregir el código de Silas Palmer .

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

¡Espero que esto ayude a alguien!