Páginas

viernes, 1 de abril de 2011

Entendiendo el MVC II

Siguiendo un poco el consejo del amigo mr_robb me dispuse a llevar un poco lo que hicimos a POO en PHP, para ir mostrando como trabajar los modelos y controladores con esta forma de programar, naturalmente cambia todo lo que es nuestro código anterior ya que ahora trabajaremos clases para nuestros modelos y controladores, aunque en lo que es el trabajo deberian de llevar a lo mismo un pequeño login.

Como lo que se quiere es mostrar como trabajar con los controladores y modelos y no hemos creado una clase base para estos ni para la vista incluiremos e instanciaremos los mismos en el momento que sea el caso pertinente, bueno acontinuación el nuevo código de nuestros modelos

usuario.php

/**
*
*Clase Modelo para gestionar los Usuarios
*/
/*Traemos la clase para trabajar las conexiones con la base de datos*/
require_once("db.php");
class Usuario 
{
 /**
 *
 *Definicion de atributos
 */
 private $_connection;
 /**
 *
 * Metodo Constructor para inicializar la conexion con la DB
 */
 public function __construct()
 {  
  $this->_connection = new db();
 }
 /**
 *
 *Metodo que gestiona el login de la aplicacion
 */
 public function login($user,$password)
 {
  $login = $this->_connection->selectAll('users',array('user'=>$user,'password'=>$password));
  if(count($login > 0)){
   if($login[0]['estatus'] === 'habilitado'){
    return true;
   }
   else{
    return "deshabilitado";
   }
  }
  else{
   return false;
  }
 }
 /**
 *
 * Metodo para agregar los usuarios 
 */
 public function agregarUsuario($datos = array())
 {
  if(!is_array($datos)){
   return false;
  }
  $insert = $this->_connection->insert('users',$datos);  
  if($insert){
   return true;
  }
  else{
   return "fallo";
  }  
 } 
 /**
 *
 *Metodo para deshabilitar los usuarios
 */
 public function deshabilitarUsuario($user)
 {
  $update = $this->_connection->update('users',array('estatus'=>'deshabilitado'),array('user'=>$user));  
  if($insert){
   return true;
  }
  else{
   return "fallo";
  }  
 }
}
Como podemos observar es una clase donde hacemos toda la lógica que tiene que ver con la gestión de usuarios, dentro de la misma se instancia la clase DB para trabajar con la base de datos (la clase DB es la implementada en este artículo).

UsuariosController.php

session_start();
require_once("model/usuario.php");
class UsuariosController
{
 private $model = new Usuario(); 
 public function login($user,$pass)
 {
  if($_SERVER['REQUEST_METHOD'] == "POST"){ 
   $login = $this->model->login($user,$pass);
   if($login){
    $_SESSION['login'] = "si";
    header("location: index.php");
    exit;
   }
   elseif($login === "deshabilitado"){
    unset($_SESSION['login']);
    $_SESSION['messaje'] = "Usuario Deshabilitado";
    header("location:index.php");
    exit;
   }
   else{
    unset($_SESSION['login']);
    $_SESSION['messaje'] = "Usuario o Contraseña incorrecto";
    header("location:index.php");
    exit;
  }
  else{
   header("location:login.php");
   exit;
  }
 } 
}

En el caso del controlador podemos visualizar que es una clase que instancia el modelo y llama a sus métodos de la lógica segun una acción, en este caso solo indicamos la del login para no extendernos tanto, lo importante es que se vea que el controlador no tiene ninguna lógica del negocio como plantean algunas personas, sino que en este se llama a la lógica del mismo según la acción indicada y según el caso este llamara a la vista correspondiente.

También es importante destacar que por cada acción (método) del controlador que realicemos debemos de crear una vista (código html) de tal manera que este tenga a donde redirigir y mandar los mensajes al usuario si esto es pertinente.

Como podemos ver el MVC es más útil cuando se trabaja de manera orientada a objetos, aunque esta es solo una aplicación sencilla de un login, podemos ver algo mas avanzado sobre este patrón en este artículo MVC avanzado donde el autor nos muestra como crear las clases para gestionar controladores y vistas de una gran manera, espero que esta pequeña introducción a este patrón de diseño les sirva como base en lo referente a este patrón, saludos

No hay comentarios:

Publicar un comentario