Page 1 of 2 12 LastLast
Results 1 to 10 of 13

Thread: MVC con PHP

  1. #1
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Wow MVC con PHP

    Hola ahora con el Tema MVC, bueno este es un tema muy importante ya que nos ayuda a separar el diseño de la programación y en cierta forma tener una aplicación mas segura.

    Comencemos con la definición :

    ¿Que es MVC ?

    MVC viene de Model, View, Controller, o bien: Modelo, Vista y Controlador. La idea básica de éste patrón es separar nuestros sistemas en 3 capas, El Modelo, La Vista y el Controlador.

    El Modelo se encarga de todo lo que tiene que ver con la persistencia de datos. Guarda y recupera la información del medio persistente que utilicemos, ya sea una base de datos, ficheros de texto, XML, etc.

    La Vista presenta la información obtenida con el modelo de manera que el usuario la pueda visualizar.

    El Controlador, dependiendo de la acción solicitada por el usuario, es el que pide al modelo la información necesaria e invoca a la plantilla(de la vista) que corresponda para que la información sea presentada.

    Un pequeño ejemplo:

    1.- Marcos entra a nuestro sitio mediante la URL www.example.com/items/listar.
    2.- Se carga el Controlador Items para ejecutar la acción de Listar.
    3.- El controlador solicita al modelo que le entregue un arreglo con todos los items que hay almacenados en la base de datos.
    4.- Una vez que posee dicha información le indica a la vista que va a utilizar la plantilla correspondiente al listado de items y le provee el arreglo con todos los usuarios.
    5.- La vista, por su parte, toma el arreglo de items y los muestra uno a uno en la plantilla que le indico el controlador.
    6.- Finalmente Marcos recibe el listado de items; lo observa un instante y decide que quiere agregar un nuevo item por lo que hace click en un enlace que lo lleva a la URL www.example.com/items/agregar.
    7.- Se repite el proceso desde el paso 1 pero con la nueva URL.

    Mas adelante colocare un ejemplo con codigo php y una interacción con un Template q recomiendo mucho SMARTY, el cual nos puede ayudar muchisimooo

    Jorge Cañari

  2. #2
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Post Rpta: MVC con PHP

    SMARTY

    Hola chicos ahora con el tema: Smarty que es un complemento a MVC con PHP.

    Smarty es un motor de plantillas Open Source para PHP que lleva muchos años en el mercado. Con él podremos realizar aplicaciones web de calidad separando el código (PHP) de la presentación (HTML/CSS).

    Cuando empezamos a desarrollar con PHP solemos hacerlo usando málas prácticas, como mezclar PHP y HTML/CSS en el mismo fichero. Pero quizás lo hacíamos porque desconocíamos un motor de plantillas tan potente y completo como Smarty.

    El lenguaje PHP es completamente abierto, en el sentido de que no requiere desarrollar en alguna arquitectura concreta, sino que un fichero puede contener un millón de líneas con código PHP y código HTML intercalados, lo cual tiene severas desventajas y problemas:

    Un diseñador tendrá muy difícil manejar el código HTML/CSS de esa página.
    La escalabilidad es prácticamente nula.
    Mantener una aplicación así se complica progresivamente.
    La depuración de ese tipo de aplicaciones se hace muy complicada.
    Pero podemos escribir aplicaciones PHP usando motores de plantillas que separan la presentación (HTML/CSS) del código (PHP), solventando de este modo todos esos problemas, y ofreciéndonos además multitud de ventajas adicionales. Este es el caso de Smarty, un motor de plantillas ya veterano en el mercado.

    Estas son las funcionalidades que podremos disfrutar con Smarty:

    - Plantillas limpias fáciles de usar por los diseñadores.
    - Escalabilidad.
    - Mantenimiento más sencillo (al igual que la escalabilidad, únicamente con la separación de código y presentación no se consigue un mantenimiento más sencillo, también se requerirá de una buena codificación).
    - Depuración óptima del código, al tener ficheros pequeños únicamente con código PHP.
    - Posibilidad de introducir comentarios dentro de las plantillas que no se enviarán al servidor. Ejemplo: {* comentario smarty *} en lugar de <!-- comentario HTML -->
    - Funciones integradas que facilitan el tratamiento de variables. Ejemplos: {foreach}{/foreach}, {if}{else}{/if}.
    - Funciones asistentes para generación de código HTML. Ejemplos: {html_image file=”banner.jpg”} generaría <img src="banner.jpg" alt="" width="700" height="55" />
    - Expandir Smarty con más funcionalidades mediante plugins.
    Code:
    <?php
       
      require_once (../conf.php);
    
    $tpl = new Plantilla();
    $tpl->display('admin/ejemplo.tpl.php');
    
    
    ?>
    De esta forma estamos creando una pagina ejemplo.tpl.php en donde se encuentra toda la información que mostrara ya sea una consulta o solo una web simple, este tipo de programación es muy conveniente respecto de la seguridad que pudiera brindar al sistema.

    Más adelante colocare mas ejemplos y una interacción completa con el MVC.

  3. #3
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Post Rpta: MVC con PHP

    Hola chicos, aqui otra vez con otro aporte màs:

    Para comenzar a utilizar el MVC en el PHP seguimos los siguientes pasos:

    1.- Primero se tiene que tener una estructura de carpetas que separe nuestro proyecto y en la cual utilicemos las librerias tales como: smarty (Sistema de Plantillas) y ADOdb (Libreria de Conexion a cualquier Base de Datos).
    A continuación la estructura:

    admin
    clases
    dao
    util
    vo
    lib
    plantillas
    cache
    configs
    templates
    admin
    templates_c
    conf.php (Archivo de configuración del Sistema)

    Descripciòn de cada Carpeta:

    - admin: Esta carpeta contiene los archivos .php que permiten la interacciòn con la logica del negocio y la Base de Datos, un ejemplo:

    Code:
    <?php
    require_once "../conf.php";
    
    if (!isset($_SESSION['USUARIO_ACTUAL'])){
       header("Location: index2.php");
    }
    $tpl = new Plantilla();
    $tpl->assign('USUARIO_ACTUAL', unserialize($_SESSION['USUARIO_ACTUAL']));
    $tpl->display('admin/principal.tpl.php');
    ?>
    En el codigo que se muestra se esta validando al usuario que ingresa al sistema via la Web y mostrando la siguiente pagina que en este caso es: principal.tpl.php, la ruta de las carpetas podria variar dependiendo la complejidad del sistema.

    - Clases: En esta carpeta encontramos las clases que nos ayudan a la interaccion con la Base de Datos y algunas configuraciones del Sistema, como por ejemplo: la carpeta DAO-> Aqui se realiza el codigo para la interaccion con la Base de Datos, osea los SELECT, INSERT, UPDATE, ETC.

    VO-> Aqui mapeas la BD a clases, es decir declaras los nombres de las tablas como *VOclases.php y colocas los campos como variables.
    UTIL-> Aqui podemos encontrar el Archivo ConexionDB.class.php, el cual nos permite la conexion con la Base de Datos, ya sea cualquier Base de Datos debido a qu tenemos ADOdb como libreria de conexion.

    - lib: Aqui colocamos las librerias que descargamos de internet para nuestro proyecto.
    - plantillas: Aqui colocamos las plantillas con la ayuda de Smarty, en esta carpeta tenemos a la subcarpeta templates donde se ubican las Plantillas que creamos de cada .php que nos solicita en el admin.

    Bueno, luego comentare un poco más a fondo ciertas configuraciones en el admin, util y conf.php.

    Muchas Gracias

    D'yaboo

  4. #4
    Kuraka Array Lalo's Avatar
    Join Date
    Feb 2007
    Location
    Lima
    Posts
    179
    Chats: 0

    Default Re: MVC con PHP

    Hey muy bueno tu ejemplo, espero que puedas terminar el tutorial, es como si dieras una clase en directo, un poquito mas "masticadito" y genial.

    Personalmente uso MVC asi:

    Model = Oracle o PostgreSQL
    View = FLEX (lo maximo... gracias Jorge, gracias Richard, gracias PERS!!!)
    Controller = JEE

    En Model, PostgreSQL es muy bueno para cualquier proyecto profesional de mediano o largo tiempo, ya que tiene una curva de aprendizaje algo tranca al menos para mi pero vale la pena cuando tu DB pesara Gigas de Gigas... como muchos empeze con MySQL, y que con su editor grafico para diseñar bases de datos esta genial!!!
    Usar Java para controlar la logica de los sistemas lo hago principalmente por la Arquitectura del JEE y la potencia del Framework Collection para Estructuras de Datos junto con las APIs de seguridad.
    Y bueno la cereza del helado... FLEX, con esto ya no me preocupo si el maldito browser de microsoft me desfigurara los views, diseño y luego lo vere igual en Firefox, Safari, Opera, Chrome, etc...

    Si usas el FlexBuilder puedes crear MVC con Php+MySql en 5 minutos, te genera todo el codigo que antes nos tomaba semanas, eso me gusta, que las cosas que no deberian tomar tanto tiempo tomen todo eso, asi tenemos mas tiempo para analizar el sistema o tomarse unas birras con los amigos.

    Y una cosita final, los XML son de la pm, y Java maneja muy bien estos bichejos, asi todo procesadito lo recive Flex, o cualquier herramienta de view que quieras usar, Java esta sacando JavaFX para manejar la view, pero el FlashPlayer tiene para rato, y con la metida de pata llamada SilverLight (microsoft) pues en Adobe deben estar refelices, le ahorraron la chamba de hacer mejor el Flash Player.

    Bueno, ya mucho floro, gracias por darte un tiempito para explicar un poco del MVC.

    Lalo

  5. #5
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Post MVC con PHP (ADODB)

    Hola chicos, otra vez con el aporte para el foro.

    Lo que vamos a realizar es un pequeño proyecto en PHP utilizando este patron de diseño MVC e interactuando con Smarty y la libreria de conexion ADOdb, para realizar dicho proyecto vamos a dar las definiciones necesarias mmm, segun puedo apreciar ya se posteo la de MVC, Smarty, esto quiere decir que se tiene que postear ADOdb, entonces aqui vamos:

    ADODB:

    Una libreria de abstracciòn de BD bastante conocida, algunos benchmarks los señalan como el más rapido que existe (rapido en cuanto al tiempo de respuesta en las consultas a la Base de Datos), incluso un poco más rapido que el mismo PEAR MDB. Esta libreria esta ampliamente extendida, tiene una gran comunidad de desarrolladores y es usada por varios frameworks y aplicaciones importantes como el PostNuke (Conocido manejador de contenidos), PHPLens (framework), Moodle (Plataforma eLearning), Krysalis (plataforma de desarrollo), entre muchos otros.

    Caracteristicas de ADODB:

    - ADOdb requiere por lo menos la versión PHP 4.0.5.
    - Soporte a multiples Bases de Datos
    - Soporte de caché
    - Manejo de Errores incorporado
    - Soporte de Transacciones

    Para instalar ADOdb, lo unico es bajarse la ultima versión, pagina principal: Pagina Principal ADOdb Database Abstraction Library for PHP (and Python) for MySQL, PostgreSQL, Microsoft SQL Server, Oracle, Firebird, Interbase, LDAP, Access, VFP, DB2 and many other databases.

    Bueno teniendo ya entendido todos los conceptos comenzaremos en el siguiente post nuestra aplicación mmm que podria ser de una Tienda, claro que les pasare la Base de Datos para que lo vayan trabajando de a pocos y entiendan la logica del sistema.

    Thanks... Su servidor D'yaboo

    PDTA.: Gracias por los comentarios del pequeño pero significativo tutorial...
    Last edited by Dyaboo; 13th March 2009 at 12:23 AM.

  6. #6
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Post MVC con PHP

    Hola chicos, aqui va otro aporte, esta vez vamos a realizar el Proyecto de una tienda basica con PHP y MVC, respecto de esto por este medio les envio el Script de la Base de Datos para que puedan entender la logica del Negocio y puedan seguir cada paso:

    Code:
    CREATE TABLE rol (
      rol_nombre VARCHAR(20) NOT NULL,
      descripcion VARCHAR(64) NULL,
      PRIMARY KEY(rol_nombre)
    )
    TYPE=InnoDB;
    
    CREATE TABLE usuario (
      id_usuario VARCHAR(20) NOT NULL,
      clave VARCHAR(20) NULL,
      nombres VARCHAR(64) NULL,
      paterno VARCHAR(32) NULL,
      materno VARCHAR(32) NULL,
      correo VARCHAR(64) NULL,
      direccion VARCHAR(128) NULL,
      telefono VARCHAR(32) NULL,
      estado CHAR(1) NULL,
      PRIMARY KEY(id_usuario)
    )
    TYPE=InnoDB;
    
    CREATE TABLE categoria (
      id_categoria INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      nombre VARCHAR(20) NULL,
      descripcion VARCHAR(64) NULL,
      PRIMARY KEY(id_categoria)
    )
    TYPE=InnoDB;
    
    CREATE TABLE producto (
      id_producto INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      id_categoria INTEGER UNSIGNED NOT NULL,
      nombre VARCHAR(20) NULL,
      descripcion VARCHAR(64) NULL,
      precio DECIMAL NULL,
      stock INTEGER UNSIGNED NULL,
      importancia INTEGER UNSIGNED NULL,
      imagen VARCHAR(20) NULL,
      PRIMARY KEY(id_producto),
      FOREIGN KEY(id_categoria)
        REFERENCES categoria(id_categoria)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;
    
    CREATE TABLE pedido (
      id_pedido INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      id_usuario VARCHAR(20) NOT NULL,
      fecha DATETIME NULL,
      estado CHAR NULL,
      PRIMARY KEY(id_pedido, id_usuario),
      FOREIGN KEY(id_usuario)
        REFERENCES usuario(id_usuario)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;
    
    CREATE TABLE usuario_rol (
      rol_nombre VARCHAR(20) NOT NULL,
      id_usuario VARCHAR(20) NOT NULL,
      FOREIGN KEY(id_usuario)
        REFERENCES usuario(id_usuario)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION,
      FOREIGN KEY(rol_nombre)
        REFERENCES rol(rol_nombre)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;
    
    CREATE TABLE detalle_pedido (
      id_detalle_pedido INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
      id_producto INTEGER UNSIGNED NOT NULL,
      id_pedido INTEGER UNSIGNED NOT NULL,
      id_usuario VARCHAR(20) NOT NULL,
      precio DECIMAL NULL,
      cantidad INTEGER UNSIGNED NULL,
      PRIMARY KEY(id_detalle_pedido, id_producto, id_pedido, id_usuario),
      FOREIGN KEY(id_pedido, id_usuario)
        REFERENCES pedido(id_pedido, id_usuario)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION,
      FOREIGN KEY(id_producto)
        REFERENCES producto(id_producto)
          ON DELETE NO ACTION
          ON UPDATE NO ACTION
    )
    TYPE=InnoDB;
    Con este script podran visualizar la Base de Datos para de esta forma comenzar en otro post el lado del administrador, en la cual realizaremos lo normal que influye un Mantenimiento (Listar, Editar, Eliminar, Actualizar) y todo con Smarty y ADOdb.

    Respecto del Smarty, para aquellos que esten todavia acostumbrados y claro es muy cierto que existen algunos procesos internos en el codigo que se realicen todavia con codigo embebido, pero se tomaran con tags smarty de esta forma:

    Code:
    {php}
    
    // Aqui va todo el codigo php que desees embeber en la pagina.
    
    {/php}

  7. #7
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Post MVC con PHP

    Hola, bueno aqui avanzando el tutorial, esta vez vamos a comenzar con el proyecto, para lo cual necesito que realicen los siguiente:

    Deben crear un archivo de nombre. conf.php, en el cual configuran todos los archivos importantes que se encuentran en las carpetas: DAO, VO, util, etc.

    un ejemplo del codigo es el siguiente.

    Code:
    <?php
    // Archivo de configuración de la aplicación
    define("APP_BASEDIR", dirname(__FILE__));
    define('SMARTY_BASEFILE', APP_BASEDIR . '/lib/Smarty-2.6.14/Smarty.class.php');
    define('ADODB_BASEFILE', APP_BASEDIR . '/lib/adodb-492/adodb.inc.php');
    
    ini_set('session.gc_maxlifetime','1800'); // 30 minutos
    
    
    require_once APP_BASEDIR . "/clases/vo/ProductoVO.class.php";
    require_once APP_BASEDIR . "/clases/dao/ProductoDAO.class.php";
    require_once APP_BASEDIR . "/clases/util/ConexionDB.class.php";
    require_once APP_BASEDIR . "/clases/util/Plantilla.class.php";
    require_once APP_BASEDIR . "/clases/util/Constantes.class.php";
    require_once APP_BASEDIR . "/clases/util/Fecha.class.php";
    require_once APP_BASEDIR . "/clases/util/Debug.class.php";
    
    session_start();
    
    ?>
    Luego de realizarlo, nos dirijimos a las carpetas que hacen referencia en nuesta configuración, para este ejemplo lo que vamos a relizar es mapear los campos de la tabla en objetos en nuestro ProductoVO.class.php, para luego pasar a programar nuestra lista de productos en el ProductoDao.class.php.

    Ademas para realizar un mantenimiento de productos necesitamos logearnos al Sistema, para lo cual creamos: UsuarioVO.class.php y UsuarioDAO.class.php, de igual forma que el anterior, no se olviden de incluirlo en el conf.php para que lo reconosca el patron de diseño y pueda ejecutarse correctamente.

    Aqui les paso un ejemplo del codigo php respecto de la funcion login() codigo que se encuenrta en UsuarioDao.class.php:

    Code:
    Class UsuarioDAO{
    
        function UsuarioDAO(){
        }
    
    function login($u, $p) {
    
            $query = "SELECT id_usuario, clave, nombres, paterno, materno, correo, direccion, telefono, estado ";
            $query .= "FROM usuario WHERE id_usuario = '".$u."' AND clave = '".$p."'";
    
            $BD = new ConexionDB();
            $recordSet = $BD->dbLink->Execute($query);
    
            if (!$recordSet){
               Debug::println("UsuarioDAO: login: Usuario y/o Clave incorrectos.");
               return false;
            }
    
            $usuario = "";
            if($fila=$recordSet->FetchRow()) {
                $usuario = new UsuarioVO($fila['id_usuario'], $fila['clave'], $fila['nombres'], $fila['paterno'], $fila['materno'], $fila['correo'], $fila['direccion'], $fila['telefono'], $fila['estado']);
            }
    
            setcookie("id_usuario", $usuario->idUsuario, time()+60*60*24*31,"/","",0);
            return $usuario;
        }
    }
    Aqui esta el Codigo para UsuarioVO.class.php:

    Code:
    <?php
    class UsuarioVO {
    
        var $idUsuario;
        var $clave;
        var $nombres;
        var $paterno;
        var $materno;
        var $correo;
        var $direccion;
        var $telefono;
        var $estado;
        var $roles;
    
        function UsuarioVO($i, $c, $n, $p, $m, $co, $d, $t, $e) {
            $this->idUsuario  = $i;
            $this->clave      = $c;
            $this->nombres    = $n;
            $this->paterno    = $p;
            $this->materno    = $m;
            $this->correo     = $co;
            $this->direccion  = $d;
            $this->telefono   = $t;
            $this->estado     = $e;        
        }   
    }
    ?>
    Con esta información por esta vez ya esta avanzado un tanto más el tema, cualquier consulta al respecto me la hacen por este medio...

    Thanks... Sus Humilde Servidor D'yaboo...

  8. #8
    Mitmakuna Array
    Join Date
    Jul 2009
    Posts
    2
    Chats: 0

    Default Re: MVC con PHP

    hola esta muy bueno eso pero diga si el mapeo se hace de manera automatica o si es manual

    por que hice todo como explica y no mapeo nada


    entonces quisiera saber


    gracias
    puede escribirme a fernando@info.cug.co.cu

    es el que reviso todos los dias
    ok

  9. #9
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Lightbulb Rpta: MVC con PHP

    Hola a todos chicos, aqui de nuevo con la explicación del tutorial, bueno respecto de la consulta, depende mucho del error que tengas, ya que si no encuentra la declaración de la tabla en el archivo conf.php no podras mapear nada, este suele ser un error muy comun, pero de todas maneras pasame el error y lo vemos ps.

    Cualquier otra consulta que tengas me la haces por este medio, estamos en contacto.

    Tu humilde servidor... D'yaboo...

  10. #10
    Hamawt'a Array Dyaboo's Avatar
    Join Date
    Dec 2008
    Location
    Lima
    Posts
    27
    Blogs
    22
    Chats: 2

    Wow MVC con PHP

    Hola chicos, otra vez retomando el POST, disculpen la demora es que estube un poco recargado de chamba pero ahora vemos ps, aqui les dejo un comentario respecto del SMARTY es importante ya que con esto ustedes podran configurar donde debe estar las plantillas creadas.

    En la carpeta clases existe una carpeta de nombre util como ya antes mencione, en ella por favor coloquen el archivo: Plantilla.class.php en el cual ustedes configuran lo que ya les he comentado:

    Code:
    <?php
    
        include_once SMARTY_BASEFILE;
    
        class Plantilla extends Smarty{
              
              function Plantilla(){
                       
                       $this->template_dir    = APP_BASEDIR . '/plantillas/templates/';
                       $this->compile_dir      = APP_BASEDIR . '/plantillas/templates_c/';
                       $this->config_dir       = APP_BASEDIR . '/plantillas/configs/';
                       $this->cache_dir        = APP_BASEDIR . '/plantillas/cache/';
              }
        }
    ?>
    Con esto podrán tener configurada la parte del SMARTY con el PHP y las plantillas.

    Su humilde Servidor... D'yaboo...

Page 1 of 2 12 LastLast

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Todas las horas son GMT -5. La hora es 10:22 PM.