2013-03-18 4 views
2

Я создал Наблюдателя для наблюдения за событием подписчика_save_before. В этом наблюдателе я обрабатываю новое поле, значение которого сохраняется, но если возникают некоторые ошибки, я хочу, чтобы запись не сохранялась и отображалось только мое сообщение об ошибке. Кажется, что исключение throwException не делает трюк. Единственный метод, который, как я думаю, может работать, - заставить поле электронной почты иметь нулевое значение, но не смог этого добиться. В subscriberController.php (Mage Ядра) У меня есть это:Предотвращение сохранения подписчиков в observer newsletter_subscriber_save_before Magento

$email = (string) $this->getRequest()->getPost('email'); 

     try { 
      if (!Zend_Validate::is($email, 'EmailAddress')) { 
       Mage::throwException($this->__('Please enter a valid email address.')); 
      } 

Это мой код (не работает):

public function NewsletterSaveSubscriber($observer) 
{ 
    $subscriber = $observer->getEvent()->getSubscriber(); 
    $name = Mage::app()->getRequest()->getParam('subscriber_name'); 



    // server side validation 
    // no name specified 
    if (!Zend_Validate::is(trim($name), 'NotEmpty')) { 

     $session = Mage::getSingleton('core/session'); 

     try { 
      Mage::throwException(Mage::helper('newsletter')->__('The name field cannot be empty!')); 
     } catch (Mage_Core_Exception $e) { 
      $session->addException($e, Mage::helper('newsletter')->__('There was a problem: %s', $e->getMessage())); 
     } 
    $observer->getRequest()->setPost('email', ''); // this code doesn't work 
    Mage::app()->getRequest()->setPost('email', ''); // this too 

      // Ohh nooo! The subscriber is stored :-(
     return $this; 
    } 


    // save the name 
    $name = htmlspecialchars($name); 
    $subscriber->setSubscriberName($name); 
    return $this; 
} 
+0

Вам нужно добавить заявление о переадресации. Вы хотите перенаправить, когда вы получите исключение с недопустимым адресом электронной почты или хотите, чтобы ваш код выполнялся, а на следующей странице отобразилось ваше сообщение. – oscprofessionals

ответ

0

Это позволит решить вашу probem:

//Error Message 
$session = Mage::getSingleton('core/session'); 
$session->getMessages(true); 
$session->addError(Mage::helper('cartware_automaticreview')->__('Could´t save.')); 

// Ohh nooo! The subscriber is not stored :)    
$controller = $observer->getControllerAction()->setFlag('',Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH,true); 
$controller->getResponse()->setRedirect(Mage::app()->getRequest()->getServer('HTTP_REFERER')); 
return; 

Удачи!

Смежные вопросы