Я создал Наблюдателя для наблюдения за событием подписчика_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;
}
Вам нужно добавить заявление о переадресации. Вы хотите перенаправить, когда вы получите исключение с недопустимым адресом электронной почты или хотите, чтобы ваш код выполнялся, а на следующей странице отобразилось ваше сообщение. – oscprofessionals