Nueva pregunta

Pregunta:

Fecha: 27-11-2015 14:56:51 (En Español)

Patrón MVC ¿dónde validar datos?[Resuelta]

Estoy usando MVC en PHP pero me surgió una interrogante, para buenas prácticas en donde debo hacer la validación digamos de un inicio de sesión así como el session_start() ya que en un sitio leí que las validaciones deben ser en el modelo y otras que en el controlador.

Por ejemplo:

En el modelo recibo por medio del controlador el user y el pass aquí mismo debo verificar que no vengan vacíos? En el mismo modelo crear las variables de sesión como : $_SESSION['session_user'] = $r['user']; ?
O eso hacerlo en el controlador y pasarle sólo los datos limpios después de validación al modelo para después en el controlador crear la sesión con sus variables?
Etiquetas: $_GET - $_POST - Clase PHP - MVC - PHP - PHP MySQLi - PHP PDO - Pregunta - Validaciones Votos: 5 - Respuestas: 7 - Vistas: 101 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 28-11-2015 03:11:30 Hola Oscar, las validaciones pueden estar distribuidas por todas tus capas, a esto se lo llama validación en profundidad, digamos que si utilizas el patrón MVC tienes varios puntos donde validar, veamos rapidamente:

    Del lado del cliente
    Tipicamente validaciones html5 y javascript, se utilizan para hacer un corte ante un mal ingreso del usuario, son validaciones debiles, porque pueden ser saltadas facilmente por el usuario, nunca podes confiar en ellas.

    Del lado del servidor
    Aquí es donde ya tienes el control, puedes y debes validar en varias capas, digamos que la validación de los datos enviados por el usuario debe ser la primer situación a contemplar/validar (array $_GET, $_POST, $_FILE, etc), normalmente esta validación es de inyección de código (no de formatos), esto se puede hacer en el controlador frontal (si es que lo usas), en tu objeto de Contexto/Request, etc (mucho dependerá de tu implementación)
    Los formatos tipicamente se validan en el motor de rutas y controlador. En el modelo no tiene mucho sentido, porque ya deberías tener el dato lo suficientemente validado. En el modelo por lo general hay una validación implícita dada por el "prepared statement de mysql".

    Digamos, esto es "a grandes rasgos", porque también tienes validaciones en la capa de negocio, etc (y no todo es MVC, tan solo es parte de "el monstruo").

    Saludos!
      Votos: 5 - Link respuesta
     
  • Fecha: 28-11-2015 09:55:10 La respuesta más acertada sería en el Controlador, pero agregando una capa de validación extra es bueno hacerlo también en la vista con Javascript o HTML5. Preferiblemente desarrolla tú las validaciones no esperes que un framework te haga del trabajo, no conoces que tan eficiente sean esas validaciones y también por un tema de hábito correcto de programación   Votos: 5 - Link respuesta
     
  • Fecha: 28-11-2015 10:31:21 1. Vista, primera linea de defensa, al menos que no ingresen "ABC" cuando se pide un numero, o comillas, o cualquier dato sencillo que pueda ser controlable "sin necesidad" de informacion adicional desde el servidor.
    2. Controllador, cuando la informacion requiere validacion con la informacion adicional desde el modelo, o alguna entidad o servicio externo... Aqui esta validacion es importante, porque el controlador despachara el flujo segun la valides o no de la informacion recibida, ya sea un flujo de manejo de errores, o una pagina de procesamiento correcto.
    2.1 Por ejemplo para hacer un pago, necesitas saber si tienes suficiente credito en tu cuenta antes de hacer la transaccion, eso no lo puedes conocer en la pantalla.
    2.2 Por ejemplo, si ingresas tu DNI, y tienes que usar un servicio del estado para validar que pertenesca a la persona que dice ser (Peru es la RENIEC).

    : D
      Votos: 4 - Link respuesta
     
  • Fecha: 28-11-2015 14:08:51 Depende del esquema.
    Te darás cuenta por las diferentes respuestas.
    En el modelo OSI, la aplicación debe presentar validaciones en las 3 últimas capas:
    - Aplicación
    - Presentación
    - Sesión
    Las demás capas también pero esas las delegas a hardware.
    En MVC de igual forma hay validaciones que colocarás en las vistas (acorde al dispositivo, ambiente, codificación, formularios, etc.), en los controladores (cualquier entrada a tu programa y algo de lógica de negocios, etc.) y finalmente el modelo que puede contener lógica de negocios y reforzar las validaciones del controlador.
    Ahora bien recuerda que los controladores deben ser pequeños. Tener controladores de mil líneas de código genralmente significa que algo no está bien. Un fat controller puede complicar el mantenimiento y crecimiento de una aplicación.
    Si divides tu aplicación en 3 capas:
    1. Cliente. Validaciones en todas aquellas partes de tu aplicación que sean puntos de entrada de datos a la misma (javascript).
    2. Servidor. De igualmente, todas las peticiones debidamente validadas (origen, datos del formulario, es una conexión segura, etc.).
    3. Base de datos. Tipos de datos, límite de datos, etc.
    Muy buenas resouestas de todos, me parece súper interesante este tema. Ojalá más colegas se animen a comentar.
      Votos: 4 - Link respuesta
     
  • Fecha: 28-11-2015 23:08:27 Muchas gracias a todos por comentar y ayudarme. Mi duda surgió ya que estoy trabajando las validaciones en el controlador pero observe un vídeo donde indica que el controlador tiene que ser mucho mas liviano que el modelo y que si o si en el modelo se hacen las validaciones así que ahí me surgió esta duda que me han resuelto ustedes compañeros. Trabajaré en la vista las validaciones clasiscas de javascript y html5, en el controlador validaciones del lado del servidor para enviar los datos al modelo lo mas limpios posibles sin crear monstruos de controladores. Gracias como siempre por su gran ayuda.   Votos: 2 - Link respuesta
     
  • Fecha: 02-12-2015 07:41:13 Me parece que las validaciones, las fuertes, las tendría que hacer el dueño del dato, el que controla el dato, el objeto que maneja ese dato.
    Si el dato se va a guardar en una base de datos, lo controla la base, no el modelo.
    Si el dato lo va trabajar el controlador, este será el encargado de validarlo.
    La vista no debería validar, por eso es vista.
    Resumiendo, sin intermediarios entre la validación y el manejo del dato.
      Votos: 0 - Link respuesta
     
  • Fecha: 02-12-2015 08:05:33 teoricamente si, pero, la vida real te dice, que puedes ahorrarte algunos request irrelevantes al servidor, si pones una primera linea en la vista, luego el controlador hace el resto, y dejas a la base de datos hacer su trabajo que es la persistencia de la data, no validarla, salvo en casos de integridad referencial o cosas puramente relacionadas al motor de la BD.   Votos: 2 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com