2010-02-01 4 views
1

J'utilise le framework Zend MVC avec un calque ORM généré avec Propel, et j'essaie de trouver le meilleur moyen d'intercepter les exceptions de la fonction save() d'un objet Propel, et de lancer les au formulaire Zend comme des erreurs. Toutes les exceptions qui sortent de l'objet Propel ne permettent pas d'identifier le champ qui a provoqué l'erreur. Je me demande donc s'il existe un moyen d'ajouter des messages d'erreur génériques au formulaire entier, plutôt que d'être forcé à attacher chaque message d'erreur à un élément de formulaire particulier.Validation de niveau de formulaire dans Zend Framework

Par exemple, j'ai une sauvegarde() appel enveloppé dans un bloc try/catch, et je peux ajouter le exception-> getMessage() aux erreurs d'un élément de forme:

try { 
    $obj->save(); 
    echo 'object saved successfully'; 
} catch (Exception $e) { 
    $form->name->addErrorMessage($e->getCode()." - ".$e->getMessage()); 
    $form->name->markAsError(); 
    $form->populate($formData); 
} 

mais je voudrais pour être en mesure de faire quelque chose comme ceci:

try { 
    $obj->save(); 
    echo 'object saved successfully'; 
} catch (Exception $e) { 
    $form->addErrorMessage($e->getCode()." - ".$e->getMessage()); 
    $form->markAsError(); 
    $form->populate($formData); 
} 

J'espère que le bon sens, grâce à l'aide,

Dave

Répondre

1

Pensez-vous aux erreurs de la base de données ou de la couche de validation Propel (qui n'est pas beaucoup développée et qui n'est pas utilisée par défaut dans l'étape save())? Si vous souhaitez utiliser les erreurs de base de données, gardez à l'esprit qu'elles ne renverront que la première erreur (donc l'utilisateur doit soumettre quatre fois s'il a entré trois erreurs). En outre, obtenir le nom du champ hors du message d'erreur can be hard. Gardez à l'esprit que certaines clés couvrent plusieurs champs ("la combinaison de name et first_name doit être unique"). C'est pourquoi, par exemple, Symfony ajoute une validation dans la couche de formulaire. Là, vous pouvez vérifier tous les champs en même temps et renvoyer plusieurs erreurs. Mais peut-être que vous le faites déjà, et ne voulez que cela comme un dernier contrôle?

+0

Je peux vérifier tous les champs dans la couche de formulaire avec Zend, mais je veux toujours faire exploser les erreurs de Propel comme vérification finale. J'intégrerais idéalement toutes les erreurs possibles qui pourraient sortir de Propel dans la couche de formulaire dans Zend, mais pour l'instant je veux juste empêcher une soumission de formulaire d'aller à une mauvaise page d'erreur PHP. Je vais devoir faire des recherches pour trouver la meilleure façon d'obtenir des erreurs de contraintes de clés uniques dans Zend_Form. Merci de votre aide, –

Questions connexes