Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/04/2011, 07:13
Avatar de anacona16
anacona16
 
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 1 mes
Puntos: 52
MVC PHP Estructurado, ¿asi esta bien?

Cuando empeze a programar con PHP me aburria tener que hacer los mismo una y otra vez (claro no sabia mucho) luego con esto de MVC y algo de POO me di cuenta que se puede reutilizar mucho.

Siguiendo este tutorial http://www.jourmoly.com.ar/introducc...primera-parte/ aprendi MVC y vaya me di cuenta que todo se vuelve mas facil, ahora, segun yo esto es MVC, pero quiero que ustedes me lo confirmen.

Esta es la estructura del sitio, en un proyecto netbeans (No es el sitio completo solo el ejemplo)



Asi como en el ejemplo utilizan un archivo index.php que dirige segun el controlador y la accion cargado yo utilizo admin/productos.php (creo debo cambiar el nombre) en modelos tengo:

Código PHP:
Ver original
  1. <?php
  2.     global $servidor, $bd, $usuario, $contrasenia;
  3.     $db = new PDO('mysql:host=' . $servidor . ';dbname=' . $bd, $usuario, $contrasenia);
  4.  
  5.     function buscarTodosLosItems($db)
  6.     {
  7.         $datos = array();
  8.         $sqlDefecto = "SELECT * FROM tb_productos ORDER BY codiprod DESC";
  9.         $consultaProductos = $db->query($sqlDefecto);
  10.         $cantRegistros  = $consultaProductos->rowCount();
  11.  
  12.         $pgnActual = isset($_GET['pgn'])? $_GET['pgn'] : 0;
  13.  
  14.         $pag = new Paginador();
  15.  
  16.         $datos = $pag->paginar($pgnActual, $cantRegistros);
  17.         $inicio = $pgnActual * 10;
  18.  
  19.         $consultaProductos = $db->query("SELECT * FROM tb_productos ORDER BY codiprod DESC LIMIT $inicio, 40");
  20.         return $datos[] = array("consultaProductos" => $consultaProductos->fetchAll(),
  21.                                 "cantidadRegistros" => $cantRegistros, "datos" => $datos, "pag" => $pag->getCantidadPaginas());        
  22.     }
  23.  
  24.     function insertar($db)
  25.     {
  26.         $insertar = $db->prepare("INSERT INTO tb_productos VALUES (0,:referencia,:descripcion,:cantidad,:valor,'No disponible')");
  27.         $insertar->bindParam(":referencia", strtoupper($_POST['referencia']), PDO::PARAM_STR);
  28.         $insertar->bindParam(":descripcion", strtoupper($_POST['descripcion']), PDO::PARAM_STR);
  29.         $insertar->bindParam(":cantidad", $_POST['cantidad'], PDO::PARAM_INT);
  30.         $insertar->bindParam(":valor", $_POST['valor'], PDO::PARAM_INT);
  31.         $insertar->execute();
  32.  
  33.         if($insertar->rowCount() > 0){
  34.             alert('Guardado con exito!');
  35.             redirect('productos.php');
  36.         }else{
  37.             alert('Error al guardar, intente de nuevo!');
  38.             redirect('productos.php?controlador=items&accion=agregar');
  39.         }
  40.     }
  41.  
  42.     function update($db,$codProducto)
  43.     {
  44.         $updateProducto = $db->prepare("UPDATE tb_productos SET refeprod = ?, descprod = ?, cantprod = ?, valoprod = ? WHERE codiprod = ?");
  45.         $updateProducto->bindParam(1, strtoupper($_POST['referencia']), PDO::PARAM_STR);
  46.         $updateProducto->bindParam(2, strtoupper($_POST['descripcion']), PDO::PARAM_STR);
  47.         $updateProducto->bindParam(3, $_POST['valor'], PDO::PARAM_INT);
  48.         $updateProducto->bindParam(4, $_POST['cantidad'], PDO::PARAM_INT);
  49.         $updateProducto->bindParam(5, $codProducto, PDO::PARAM_INT);
  50.         $updateProducto->execute();
  51.  
  52.         if($updateProducto->rowCount() > 0){
  53.  
  54.             alert('Registro actualizado!');
  55.             redirect('productos.php');
  56.  
  57.         }else{
  58.             alert('Error al actualizar, intente de nuevo!');
  59.             redirect('productos.php');
  60.         }
  61.     }
  62.  
  63.     function eliminar($db,$codProducto)
  64.     {
  65.         $deleteProducto = $db->exec("DELETE FROM tb_productos WHERE codiprod = $codProducto");
  66.  
  67.         if($deleteProducto > 0){
  68.            
  69.             alert('Registro eliminado!');
  70.             redirect('productos.php');
  71.  
  72.         }else{
  73.             alert('Se ha producido un error, intente de nuevo');
  74.             redirect('productos.php');
  75.         }
  76.     }

en el controlador tengo:

Código PHP:
Ver original
  1. <?php
  2.     function listar()
  3.     {
  4.         //Incluye el modelo que corresponde
  5.         require '../modelos/productosModelo.php';
  6.  
  7.         //Le pide al modelo todos los items
  8.         $productos = buscarTodosLosItems($db);
  9.  
  10.         //Pasa a la vista toda la información que se desea representar
  11.         require '../vistas/listar.php';
  12.     }
  13.  
  14.     function agregar()
  15.     {
  16.         require '../modelos/productosModelo.php';
  17.  
  18.         if($_POST){insertar($db);}
  19.  
  20.         require '../vistas/agregar.php';
  21.     }
  22.  
  23.     function guardarEditar()
  24.     {
  25.         require '../modelos/productosModelo.php';
  26.         $codProducto = $_GET['codigo'];
  27.         if (isset($codProducto) && is_numeric($codProducto) && !empty($codProducto)) {
  28.             update($db, $codProducto);
  29.         }else{
  30.             alert('mal');
  31.             redirect('../admin/productos.php');
  32.         }
  33.     }
  34.  
  35.     function borrar()
  36.     {
  37.         require 'modelos/productosModelo.php';
  38.  
  39.         $codProducto = $_GET['codigo'];
  40.         if (isset($codProducto) && is_numeric($codProducto)) {
  41.             eliminar($db,$codProducto);
  42.         }else{
  43.             alert('mal');
  44.             redirect('productos.php');
  45.         }
  46.     }

y en las vistas pues es solo HTML, el unico PHP es para listar que tengo esto:

Código PHP:
Ver original
  1. <?php foreach($productos["consultaProductos"] as $producto): ?>
  2.                 <tr align="center">
  3.                     <td><?php echo $producto['codiprod'] ?></td>
  4.                     <td><?php echo $producto['refeprod'] ?></td>
  5.                     <td align="left"><?php echo $producto['descprod'] ?></td>
  6.                     <td><?php echo $producto['cantprod'] ?></td>
  7.                     <td align="right"><?php echo '$ '. number_format($producto['valoprod']) ?></td>
  8.                     <td><img src="../img/marquilla.png" width="16" height="16" alt="Generar marquilla" /></td>
  9.                     <td>
  10. </tr>
  11. <?php endforeach; ?>

Para cargar la vista de agregar utilizo una URL como esta:

Código PHP:
Ver original
  1. productos.php?controlador=productos&accion=agregar

Para eliminar asi:

Código PHP:
Ver original
  1. productos.php?controlador=productos&accion=borrar&codigo=<?php echo $producto[0] ?>

y bueno esto es lo mas notorio.

¿Asi esta bien?

Gracias por sus sugerencias y comentarios
__________________
Aprendiendo!!!