Question

Je personnaliser votre commande une page et que vous voulez ajouter la validation du nouveau champ lors de l'étape de facturation. Pour cette validation, je ne veux pas réécrire contrôleur ou d'un modèle, mais souhaitez utiliser observateur controller_action_predispatch_checkout_onepage_saveBilling faire toute validation ici et sauver terrain pour Mage::getSingleton('customer/session') si c'est correct ou déclencher une erreur. Mais je ne vois pas comment comment ajouter l'erreur et le montrer sur le devant. Je suis en train:

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

Je peux jeter exception:

 Mage::throwException('Error'); 

Que cesse l'exécution, mais je ne peux pas montrer un message d'erreur.

Est-il possible comment le résoudre?

Était-ce utile?

La solution

Dans votre méthode d'observation, vous essentiellement besoin de dire au répartiteur pour arrêter la demande et non l'expédier à l'action du contrôleur afin que le corps de la réponse que vous paramétrez est envoyé au navigateur et le contrôleur ne fera rien. Faire cela est assez simple à réaliser et peut être fait en mettant un drapeau sur l'action du contrôleur avant votre retour de l'observateur:

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

Pour une brève exploration des raisons pour lesquelles ces travaux, jetez un oeil à Mage_Core_Controller_Varien_Action::dispatch et notez la logique entourant l'appel à la méthode d'action sur l'objet du contrôleur.

Autres conseils

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));
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top