Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Validación de formularios en MVC

Estas en el tema de Validación de formularios en MVC en el foro de PHP en Foros del Web. Hola a todos, ¿qué tal? Creo este tema para debatir sobre la validación de formularios (datos enviados por POST) en una aplicación basada en el ...
  #1 (permalink)  
Antiguo 01/02/2014, 13:54
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 8 meses
Puntos: 26
Validación de formularios en MVC

Hola a todos, ¿qué tal?

Creo este tema para debatir sobre la validación de formularios (datos enviados por POST) en una aplicación basada en el patrón de arquitectura MVC. Lo que me interesa es encontrar, a partir del aporte de Uds., una buena forma de implementar las validaciones en mis proyectos (cómo hacerlo, dónde hacerlo, etc.).

Personalmente, estoy en el proceso de aprender sobre el patrón MVC (por lo tanto, pido disculpas por cualquier mala interpretación de conceptos que haga) y sólo tengo experiencia utilizando CodeIgniter. Si bien ha sido un avance desde mi forma anterior de programar y diseñar software web, hay algunas cosas que no me convencen.

En CodeIgniter, contamos con la librería Form_validation que pemite realizar ciertas validaciones genéricas (que un campo sea numérico, que contenga un e-mail válido, etc.). Esta validación se realiza en el controlador, y cuando todo es correcto, se puede proceder a instanciar objetos (cuyo estado se presupone válido gracias a Form_validation) del modelo para almacenarlos en la base de datos.

Hasta ahí todo bien, pero, ¿qué pasa cuando uno quiere validar algo más específico propio del dominio del problema? En este caso, CodeIgniter permite crear métodos privados dentro del mismo controlador donde se está realizando la validación, y esto es lo que no me gusta. Por ejemplo, si yo estoy procesando el login de un usuario y quiero verificar que no esté dentro de la lista de usuarios bloqueados para impedirle o no el ingreso, debería crear un método "_noEstaBloqueado()" dentro del controlador Usuarios para que le pregunte a la clase Usuario del modelo si la cuenta fue bloqueada, y luego "le responda" a la librería de validaciones. En realidad, según tengo entendido, todo esto debería realizarse en el modelo sin necesidad de crear ese método en el controlador, y el controlador debería limitarse a acciones más básicas.

Otro problema con el que suelo encontrarme al trabajar de esta forma es que a veces termino realizando muchas consultas innecesarias a la base de datos. Es decir, si en el campo del formulario recibo el nombre del usuario, en cada método privado que yo agregue para validaciones específicas (que son independientes entre sí) primero tengo que buscar cuál es el ID del usuario, dato indispensable para muchas validaciones.

Finalmente, me he encontrado en situaciones donde necesitaba más de dos valores o parámetros para realizar una validación, pero CodeIgniter sólo permite dos (el valor del campo a validar y un parámetro opcional). En estos casos, me vi obligado a enviar los parámetros de forma una engorrosa. El hecho de que este framework almacene todas las funciones de validación en un único string lo considero un problema potencial.

En fin, sería bueno que aquellos que hayan probado otros frameworks o hayan desarrollado sus propias "estructuras de trabajo" mencionen alternativas que resuelvan los inconvenientes que mencioné.

Un saludo.
  #2 (permalink)  
Antiguo 01/02/2014, 13:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validación de formularios en MVC

La validación de datos (independientemente del origen) debe hacerse en el modelo y debe ser automático, es decir, siempre se debe auto-validar.

Imagina que al instanciar el modelo, en caso de ser inválido arroja una excepción que puedes controlar para determinar que hacer en el controlador, eso sería lo correcto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/02/2014, 14:06
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 8 meses
Puntos: 26
Respuesta: Validación de formularios en MVC

Gracias por la respuesta, pateketrueke.

Espero haberte interpretado correctamente. Lo que entiendo es que, si por ejemplo tengo un método "setEmail($email)" en el modelo de Usuario, éste mismo método debería lanzar una excepción informando que el dato recibido en el formulario no es válido. Entiendo también que debería descartar la idea de basarme en una clase específica para validaciones, que veo se utilizan mucho.

Ahora bien, ¿cómo se podrían manejar de manera eficiente los mensajes de error en esos casos? Esa es la parte que me gusta de cómo trabaja CodeIgniter, hay ciertas validaciones genéricas que se pueden usar fácilmente, e incluso ya tienen sus propios mensajes de error y se pueden mostrar fácilmente en la vista.

Si tienes un código de ejemplo o algún enlace útil, te lo agradecería.

Un saludo.
  #4 (permalink)  
Antiguo 01/02/2014, 14:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validación de formularios en MVC

Olvida CodeIgniter, es mala referencia.

Además el tema de excepciones es altamente controlable, depende como las nombres y verifiques en tu código, te sugiero consultar el manual de PHP al respecto.

Un ejemplo genérico sería así:
Código PHP:
Ver original
  1. namespace MyApp;
  2. use MyApp\Models\UserModel as Model;
  3. use MyApp\Controllers\AppController as Controller;
  4.  
  5. class MyController extends Controller {
  6.   public function indexAction() {
  7.     $data = $this->request->getPost('user-data');
  8.  
  9.     try {
  10.       $model = new Model($data);
  11.       $model->save();
  12.     } catch (\InvalidDataModel $e) {
  13.       $this->view->render('user-form', $e->getErrors());
  14.     }
  15.   }
  16. }

Como sea, el tema es que el modelo por si mismo no sabe validarse, para ello debería usar alguna librería genérica de validación.

Al final es un tema de composición, si lo reflexionas entenderás.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 01/02/2014, 14:18
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 8 meses
Puntos: 26
Respuesta: Validación de formularios en MVC

Muchas gracias, pateketrueke. Entiendo la idea, lo iré probando en una situación real para ver cómo me resulta. Y tendré que ponerme en campaña de quitarme algunas malas costumbres introducidas por CI. ¿Tú recomiendas algún framework de los que dan vueltas o desaconsejas su uso?

Un saludo.
  #6 (permalink)  
Antiguo 01/02/2014, 14:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Validación de formularios en MVC

Lee lo siguiente: http://www.forosdelweb.com/f68/suger...eworks-959891/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 04/02/2014, 09:46
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Validación de formularios en MVC

Cita:
Iniciado por RabidFish Ver Mensaje
Muchas gracias, pateketrueke. Entiendo la idea, lo iré probando en una situación real para ver cómo me resulta. Y tendré que ponerme en campaña de quitarme algunas malas costumbres introducidas por CI. ¿Tú recomiendas algún framework de los que dan vueltas o desaconsejas su uso?

Un saludo.
Lo recomendable antes de probar un framework es que tengas bases solidas en por lo menos dos area:
  • Programación orientada a objetos
  • Diseño orientado a objetos

De estos temas hay mucha información en la red. Es importante que sepas de esos temas ya que los Frameworks hacen uso intensivo de ese conocimiento. Y es el principal motivo por el cual los desarrolladores abandonan el uso de esas herramientas.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: formulario, formularios, mvc, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:20.