2010-12-13 8 views
2

Sollte Fehler bilden Ausnahmen auslösen, zum Beispiel, wenn der Benutzername falsch ist, oder das Passwort ist falsch/zu kurz .uswAusnahmeklasse für Formulare

I Ausnahmen mit Formen verwendet haben, aber wenn die Ausnahme nur die ausgelöst wird, Ausnahmen wird angezeigt und nicht die Form und welches Feld der Fehler aufgetreten ist, ist ein Auszug aus meiner Ausnahmeklasse wie folgt:

werfen neue InputException ($ -Feld, $ Nachricht);

z.B. // Benutzername zu kurz:

Neue InputException auslösen ('Benutzername', 'Benutzername muss 6 oder mehr Zeichen enthalten');

Und dann sollte diese Nachricht unter dem Textfeld Benutzername angezeigt werden. Die Hauptsache ist, dass das Formular anzeigt, wenn die Ausnahme ausgelöst wird.

Antwort

2

Ausnahmen müssen nicht geworfen werden. Für Benutzeroberflächen stapele ich sie normalerweise.

Betrachten Sie das folgende Beispiel (gebaut in 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(); 
    } 

} 

Sie können immer noch instanziiert Exception Klassen, ohne sie zu werfen. Im obigen Beispiel staple ich sie im Controller und übergebe sie an die Ansicht, bevor sie angezeigt wird. Aus Sicht kann ich einfach tun:

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

Natürlich können Sie Ihre Ausnahmeklassen anpassen (dh: ein InputException wie in Ihrem Beispiel), und man kann sich immer noch aus, wenn nötig, wie in AJAX-Anforderungen und eine solche.

Hoffe, das hilft!

+1

guten Code. Da Sie nicht sagen, warum, Stacking ist am besten, so dass der Benutzer nicht ein Problem beheben nur um zu sagen, es gibt ein anderes Problem, kann aber beide sofort beheben (wenn mehr als ein Eingabeproblem besteht) – zanlok

+0

@zanlok: In der Tat, vergessen um es zu erwähnen. Vielen Dank! – netcoder

Verwandte Themen