2010-12-13 3 views
2

doivent former des erreurs jettent des exceptions, par exemple, si le nom d'utilisateur est incorrect, ou mot de passe est erroné/trop court .etcException classe pour les formes

J'ai utilisé des exceptions avec des formes, mais quand l'exception est levée seulement les exceptions sont affichées et non la forme et le champ sur lequel l'erreur s'est produite, un extrait de ma classe d'exception est comme suit:

throw new InputException ($ field, $ message);

par exemple. // nom d'utilisateur trop court:

throw new InputException ('nom d'utilisateur', 'Nom d'utilisateur doit comporter au moins 6 caractères');

Ensuite, ce message devrait apparaître sous le champ de texte du nom d'utilisateur. La principale chose que je veux est que le formulaire montre quand l'exception est levée.

Répondre

2

Il n'est pas nécessaire de lancer des exceptions. Pour les interfaces utilisateur, je les empilerai habituellement.

Prenons l'exemple suivant (construit dans Zend Framework):

class MyController extends Zend_Controller_Action { 

    protected $_exceptions = array(); 

    // Controller action, which displays a form 
    public function indexAction() { 
     $username = $this->_getParam('username'); 
     if (empty($username)) { 
     $this->addException(
      new InvalidArgumentException('Username cannot be empty') 
     ); 
     } 
     // more handling code... 
    } 

    public function addException(Exception $e) { 
     $this->exceptions[] = $e; 
    } 

    // executing just before displaying the user interface 
    public function postDispatch() { 
     // assign the exception stack to the view file 
     $this->view->exceptions = $this->_exceptions; 
     parent::postDispatch(); 
    } 

} 

Vous pouvez toujours instancier Exception cours sans les jeter. Dans l'exemple ci-dessus, je les empile dans le contrôleur et les passe à la vue avant de l'afficher. De l'avis, je peux simplement faire:

if (!empty($this->exceptions)) { 
    foreach ($this->exceptions as $exception) { 
     // display something 
    } 
} 

Bien sûr, vous pouvez personnaliser vos classes d'exception (par exemple: un InputException comme dans votre exemple), et vous pouvez toujours les jeter si nécessaire, comme dans les requêtes AJAX et tel.

Espérons que cela aide!

+1

bon code. puisque vous ne dites pas pourquoi, l'empilage est meilleur pour que l'utilisateur ne répare pas un problème seulement pour se faire dire qu'il y a un autre problème, mais peut corriger les deux à la fois (s'il y a plusieurs problèmes d'entrée) – zanlok

+0

@zanlok: pour le mentionner. Merci! – netcoder

Questions connexes