Domanda

Sono la personalizzazione prima pagina di checkout e si desidera aggiungere la convalida del nuovo campo durante la fase di fatturazione. Per fare questo la convalida Non voglio riscrivere controller o modello, ma si desidera utilizzare osservatore controller_action_predispatch_checkout_onepage_saveBilling fare tutti convalida qui e campo Salva per Mage::getSingleton('customer/session') se è ok o attivare un errore. Ma non vedo alcun modo come aggiungere di errore e vederlo sul davanti. Sto cercando:

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'))));

posso buttare eccezione:

 Mage::throwException('Error'); 

Than esecuzione si ferma, ma non posso mostrare il messaggio di errore.

C'è un modo come risolverlo?

È stato utile?

Soluzione

Nel vostro metodo di osservatore, è essenzialmente bisogno di dire al dispatcher per fermare la richiesta e non inviare alla azione di controllo in modo che il corpo della risposta impostato verrà inviato al browser e il controller non farà nulla. Fare questo è abbastanza semplice da realizzare e può essere fatto impostando una bandiera sul azione di controllo prima che i rendimenti osservatori:

$action = $observer->getEvent()->getControllerAction();
$action->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);

Per una breve esplorazione del perché questo funziona, diano un'occhiata al Mage_Core_Controller_Varien_Action::dispatch e notare la logica che circonda la chiamata al metodo di azione sull'oggetto controller.

Altri suggerimenti

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));
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top