如何显示前端观察者的验证错误?
-
16-10-2019 - |
题
我正在自定义一页结帐,并希望在计费步骤中添加新字段的验证。为了进行此验证,我不想重写控制器或模型,但要使用观察者 controller_action_predispatch_checkout_onepage_saveBilling
在此处进行所有验证并将字段保存到 Mage::getSingleton('customer/session')
如果还可以或触发错误。但是我看不出如何添加错误并在前面显示错误。我正在努力:
return array('error' => -1, 'message' => $helper->__('Your card number or zipcode are not correct.'));
Mage::app()->getResponse()->setBody(Mage::helper('core')->jsonEncode(array('error' => -1, 'message' => $helper->__('No card number was found in loyalty request'))));
我可以做例外:
Mage::throwException('Error');
比执行停止,但我无法显示错误消息。
有什么方法可以解决?
解决方案
在您的观察者方法中,您本质上需要告诉调度程序停止请求,而不要将其派遣到控制器操作,以便将您设置的响应主体发送到浏览器,并且控制器不会做任何事情。这样做很容易完成,可以通过在观察者返回之前在控制器操作上设置标志来完成:
$action = $observer->getEvent()->getControllerAction();
$action->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
要简要探索为什么有效,请看一下 Mage_Core_Controller_Varien_Action::dispatch
并注意围绕控制器对象上操作方法的逻辑。
其他提示
public function observerCall($observer)
{
$controller = $observer->getControllerAction();
$controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
$response = array('error' => -1, 'message' => $helper->__('Error'));
return $controller->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
}