2012-04-02 8 views
6

Esta podría ser una pregunta n00bish, pero lo que sea. Está bien usar excepciones para la validación de formularios? Digamos que tengo un formulario que pregunta a los usuarios su nombre y correo electrónico, ¿es correcto hacer lo siguiente?¿Se deben usar excepciones para la validación de formularios?

try { 
    if (empty($_POST["name"])) { 
     throw new UserRegistrationException("Your name cannot be empty."); 
    } 

    if (filter_var($_POST["email"])) { 
     throw new UserRegistrationException("Invalid email"); 
    } 

    // Save new user into database 
} catch (UserRegistrationException $e) { 
    // Show errors on screen 
} 

también -si esto es, de hecho, la forma correcta de hacerlo- si el usuario envía tanto un nombre vacío y un correo electrónico válido, habría tanto de las excepciones ejecutar o sólo el que aparece por primera vez (el nombre uno en este caso)?

Estoy usando PHP por cierto.

+0

Definitivamente es una forma extraña de usar excepciones. "se ejecutarían las dos excepciones o solo la que aparece primero" - ¿es tan difícil escribir 5 líneas de código y verte a ti mismo? – zerkms

+0

Solo el primero sería arrojado y atrapado, otros omitidos. Si necesita acumular mensajes de error, es mejor que simplemente use una cadena simple si/else y anexe mensajes a una matriz. –

+0

@Michael, pensé que sí ... Aunque me pareció una buena ocasión para usar excepciones (ya que la entrada no válida debería considerarse _excepcional_), pero me quedaré con el if/else's – federicot

Respuesta

4

Personalmente me gusta usar excepciones para todo lo que detenga o modifique el flujo del programa. En otras palabras, si la validación de un campo en particular cambia la manera en que se procesan los datos o si se debe repetir el proceso, siempre uso la excepción para el manejo de errores.

Si es trivial, o simplemente estoy compilando una lista de mensajes de error, entonces no desencadenaré excepciones.

Para responder a las preguntas, no se pueden lanzar dos excepciones al mismo tiempo. Se arrojará la primera instrucción throw que se alcance. Eso no quiere decir que a veces no tiene sentido volver a lanzar como otro tipo de excepción.

+0

Supongo que esto es, como usted dice, un caso trivial (y también estoy compilando una lista de mensajes de error) por lo que las excepciones no cabrían en este caso – federicot

+0

También podría extender la clase Exception para anexar una pila de excepciones construidas, luego lanzar una excepción agregada (que podría usar para compilar una lista de mensajes de error, pasar a encuentre uno de particular interés, etc.) – landons

+0

O podría crear una colección de errores de validación a la manera antigua (por ejemplo, agregar a una matriz), y luego lanzar una única excepción de validación que contenga todos esos errores. –

4

El caso de uso para excepciones es para condiciones excepcionales. En este caso, ¿espera que los campos de nombre de usuario y contraseña estén en blanco? Si está mostrando un formulario web, yo diría que sí, que espera campos de nombre de usuario y contraseña en blanco, por lo que debería verificar esa condición explícitamente, en lugar de lanzar una excepción.

Para responder a su pregunta específica, no se lanzarán ambas excepciones si se produce un error. La instrucción throw enviará el programa al bloque catch. A partir de allí, el control fluirá de forma normal.

+5

Según su definición, todas las excepciones son inesperadas. ¿Cómo diablos sabrías cómo manejarlo? Yo argumentaría que las excepciones se usan para casos donde la ejecución primaria no debería continuar. – landons

+0

Sin mencionar que uno podría simplemente agregar los errores de validación a una matriz y luego explotar eso en una cadena que luego se lanza como una excepción – Alex

Cuestiones relacionadas