SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
TUTORIAL MVC CON




    Del 1-12-2007 al 15-12-2007

    juaxix
    zenphp :: Proyecto alojado en la Forja de Rediris
    http://blog.zenphp.es

    Abstract
    ¡Aprendiendo zenphp!
    Construyendo un sistema MVC simple con PHP y zenphp
    En éste breve tutorial aprenderás cómo se construye un modelo de datos con el subsistema
    Modelo/Visualizador/Controlador de zenphp gracias a la ayuda de librerías estándar de
    PHP y las características de zenphp.

    Introducción

    Bienvenid@ al primer tutorial de construcción de aplicaciones con MVC de zenphp, es
    necesario que en tu servidor dispongas de la “Standard PHP Library”, tiene más ayuda
    disponible aquí.
    A partir de aquí estamos siguiendo una serie de pasos desde 0 necesarios para un sistema
    completo pero sencillo de entender y construir.

    La entrada

    Un punto importante a tener en cuenta es que el sistema comienza siempre en el mismo
    sitio, desde donde se dirige a la parte del mismo que ha de tomar el control, lógico, ¿no?

    Para que ésta idea funcione hemos de decirle al servidor Apache que nos lleve al punto
    inicial desde donde queremos mantener el orden, para ello necesitamos establecer ciertas
    reglas de “redirección”
    y que se escriben en el fichero .htaccess del directorio raíz de la aplicación :
    “/htdocs/aplicaciones/aplicación”,
                                                                            Ver aplicaciones de
                   AddDefaultCharset UTF-8
                   RewriteEngine on                                              ejemplo

                   RewriteCond %{REQUEST_FILENAME} !-f
                   RewriteCond %{REQUEST_FILENAME} !-d

                   RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

    Esto es precisamente lo que se hace en Django al establecer las reglas dentro de route.py

    




1                     “PHP para seres humanos”
Primero comprobamos si existe el comando RewriteCond,ya que si no existe
                                                                        redireccionaremos desde el fichero index.php.Sin embargo se ha de comprobar además si
                                                                        existe el fichero para poder seguir redireccionando imágenes y otros ficheros.
                                                                        Si no podemos usar .htaccess o mod_rewrite, tendremos que realizar las peticiones de
                                                                        redirección manualmente…mediante una clase, zen_enrutador, lo que quiere decir que
                                                                        todos los enlaces deben de estar en la forma "index.php?ruta=[la-peticion-aqui]", e.j.
                                                                        index.php?ruta=productos/indice.

                                                                                                       ¿Cómo funciona en Apache?
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                        Conclusiones: no siempre podremos utilizar las redirecciones en Apache por motivos de
                                                                        seguridad del servidor ,por lo tanto podemos construir nuestras aplicaciones manteniendo
                                                                        toda la lógica del programa pero haciendo un pequeño cambio en la llamada a la clase que
                                                                        “enruta” todas nuestras direcciones al punto inicial, en lugar de utilizar
                                                                        directorio/aplicación/módulo_o_componente utilizaremos un simple cambio:
                                                                        directorio/index.php/aplicación/módulo_o_componente
                                                                        De forma que el zen_enrutador se da cuenta de dónde vienen las “direcciones” virtuales
                                                                        para realizar correctamente las llamadas a las partes de la aplicación del usuario.
                                                                             Nota: tomaremos como directorio principal /ejemplo/




                                                                                      “PHP para seres humanos”
                       2
Veamos,a grandes rasgos,qué es lo que necesitamos: programas:/ejemplo/index.php,
                                                                        /ejemplo/clases/clase_ejemplo.php, plantillas en: /ejemplo/plantillas/html y
                                                                        /ejemplo/css (ver más abajo con la creación de las 3 plantillas HTML)

                                                                                                        clase_ejemplo.php




                                                                                                Entrada/Salida de la aplicación
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                                                        /ejemplo/index.php

                                                                                                                                     Plantillas.html



                                                                                                                                      Plantillas.xml

                                                                              clase_ejemplo que
                                                                             contiene el conjunto
                                                                                                                                      Plantillas.xslt
                                                                                     MVC



                                                                                                                                      Plantillas.css




                                                                                     “PHP para seres humanos”
                       3
Ahora que tenemos todas las peticiones funcionando y conocemos el esquema del flujo de
                                                                        información desde un único punto de entrada podemos empezar a escribir el fichero
                                                                        index.php.

                                                                        Pero primero vamos con unas tareas iniciales,como crear los directorios de aplicaciones y
                                                                        clases,así como de contenidos.

                                                                        En “media” es donde colocamos las imágenes ,plantillas,css,idiomas, etc. Y si tenemos un
                                                                        administrador, hacemos lo propio ya que son aplicaciones distintas,pero en un
                                                                        subdirectorio admin.

                                                                        Organizamos la estructura para que quede como en la captura fácil, ¿no? :




                                                                        Lista de directorios y subdirectorios de la captura:
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                            /ejemplo
                                                                                - + admin
                                                                                       clases
                                                                                       media
                                                                                              index.php
                                                                                - + aplicaciones
                                                                                - + clases
                                                                                              clase_ejemplo.php
                                                                                - + media
                                                                                       plantillas
                                                                                       es
                                                                                - + zenphp
                                                                                - index.php

                                                                        Se marca en negrita lo que vamos a construir a continuación…De forma que creamos un
                                                                        primer fichero llamado index.php en /ejemplo/index.php con el siguiente contenido:

                                                                        <?php
                                                                        # Tareas de inicialización (cargar el sistema, etc)
                                                                        require('zen.php'); //Carga las clases,configuraciones y funciones
                                                                        //fundamentales
                                                                        #espacio para añadir la instancia de la clase_ejemplo a continuación
                                                                        ?>



                                                                                       “PHP para seres humanos”
                       4
El fichero zen.php realiza todas tareas de inicialización general, esto es :la definición de
                                                                        constantes, (todas las de zenphp empiezan por ZF_) ,establecer el nivel de control de
                                                                        errores dependiendo de si estamos en modo depuración o no,cargando funciones y clases
                                                                        generales ( todas empiezan por zen_ ), etc.

                                                                                                       Puedes aprovechar este momento
                                                                                                       para echarle un vistazo al
                                                                                                       contenido de zen.php



                                                                        Lo siguiente que debemos hacer es crear la clase_ejemplo para almacenarla en
                                                                        /ejemplo/clases/clase_ejemplo.php e instanciarla dentro de /ejemplo/index.php.
                                                                        En zenphp se intentan abolir el uso de variables globales y toda la información fluye a
                                                                        través de un sistema de padres e hijos como en Java ,el sistema MVC está basado en esta
                                                                        teoria,y se usa para transportar los datos a través del sistema sin tener que usar
                                                                        $GLOBALS. El manual sobre usar variables globales en PHP es recomendado en este
                                                                        momento.
                                                                        La clase más importante es el modelo de datos ( zen_modelo_datos ) ya que es la que
                                                                        conecta los 3 objetos que forman el MVC, para utilizarla creamos una clase que contendrá
                                                                        el acceso a una o varias tablas de la base de datos de forma que en una sóla variable
                                                                        disponemos del acceso al modelo, el visualizador y el controlador.

                                                                        /ejemplo/clases/clase_ejemplo.php:
                                                                        <?php
                                                                        Class ejemplo extends zen_modelo_datos {
                                                                         /**
                                                                         * Aplicación a la que se vincula el modelo de datos obligatoriamente
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                         * @var zen
                                                                        */
                                                                         var $padre; //Todo: modelo de datos está asociado a una aplicación
                                                                         /**
                                                                         * Constructor :: MVC->Modelo , necesita una aplicación padre
                                                                         * Devuelve un modelo de datos
                                                                         *
                                                                         * @param zen $_padre
                                                                         * @return ejemplo
                                                                         */
                                                                         function ejemplo(&$_padre){
                                                                         /*
                                                                            Ahora tenemos que llamar al constructor de la clase que heredamos que tiene
                                                                             el formato siguiente :
                                                                            zen_modelo_datos($padre,$campos,$tablas,$hijo,$condiciones_where);
                                                                            campos son los campos de las tablas, hijo es la subclase de esta si existiera
                                                                            condiciones_where sirve para limitar los datos mediante instrucciones where
                                                                            en sintaxis SQL, ejemplo : "where ide=1".

                                                                         Notas: $padre es un tipo „zen‟; $hijo y $condiciones_where son opcionales
                                                                         */
                                                                          parent:: zen_modelo_datos($this,"ide,titulo,texto,fecha,imagen,fichero" ,"ejemplos",null,"");
                                                                          #ESPACIO RESERVADO PARA INICIALIZAR EL CONTROLADOR PROPIO
                                                                         }
                                                                        } //fin de la clase ejemplo en /ejemplo/clases/clase_ejemplo.php
                                                                        ?>




                                                                                        “PHP para seres humanos”
                       5
Hecho esto ya disponemos de un modelo de datos listo para usar, pero antes necesitamos
                                                                        la tabla de donde extraer los datos:
                                                                        Para la tabla „ejemplos‟ podemos utilizar la siguiente consulta SQL:

                                                                        CREATE TABLE `ejemplos` (
                                                                        `ide` INT NOT NULL AUTO_INCREMENT ,
                                                                        `titulo` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
                                                                        `texto` TEXT CHARACTER SET utf8 COLLATE utf8_bin,
                                                                        `fecha` DATE NOT NULL ,
                                                                        `imagen` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
                                                                        `fichero` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
                                                                        PRIMARY KEY ( `ida` )
                                                                        ) TYPE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;
                                                                        Podeis utilizar PHPMyAdmin o bien usar una línea para ello desde php:

                                                                        <?php
                                                                        zen_basedatos:: crear_tabla ('`ejemplos` (
                                                                        `ide` INT NOT NULL AUTO_INCREMENT ,
                                                                        `titulo` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
                                                                        `texto` TEXT CHARACTER SET utf8 COLLATE utf8_bin,
                                                                        `fecha` DATE NOT NULL ,
                                                                        `imagen` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
                                                                        `fichero` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
                                                                        PRIMARY KEY ( `ida` )
                                                                        ) TYPE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;');
                                                                        ?>
                                                                        Ahora que hemos creado la clase alojada en /clases/clase_ejemplo.php , podemos
                                                                        completar el código inicial de /ejemplos/index.php reemplazando el comentario
                                                                        #espacio para añadir la instancia de la clase_ejemplo a continuación
                                                                        Por :
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                        $zen =& new zen(); //Crea una aplicación donde alojar el modelo de datos
                                                                        zen___carga_clase('ejemplo'); //Carga la clase ejemplo para poder
                                                                        instanciarla
                                                                        $zen->ejemplo =& new ejemplo($zen); //Asocia el padre como la aplicación
                                                                        principal
                                                                        //Si se quiere se puede añadir una condición a asegurar de la forma
                                                                        assert(is_a($zen->ejemplo,'ejemplo'));
                                                                        //Ya tenemos la clase instanciada,el modelo se carga automáticamente con el
                                                                        // visualizador y el controlador por defecto,ahora podemos empezar con el
                                                                        // contenido:
                                                                        $contenido = array(); //Contenido dinámico a mostrar
                                                                        $contenido['titulo'] = "Listado de ejemplo";
                                                                        #espacio para insertar el contenido procesado por el controlador

                                                                        Ahora la variable $zen->ejemplo tiene todo lo necesario para operar con los datos,
                                                                        gestionar las entradas y salidas así como mostrar las salida estándar con HTML.

                                                                        Vamos a usar PHPMyAdmin para insertar una tupla de ejemplo ya que el administrador
                                                                        interno de la web no nos interesa en este momento.

                                                                        Para mostrar dicha tupla crearemos una plantilla simple que utilizaremos desde el
                                                                        visualizador dentro de la clase_ejemplo::zen_html_modelo_datos, a la que accedemos en
                                                                        nuestro ejemplo desde $zen->ejemplo->html




                                                                                      “PHP para seres humanos”
                       6
El código para mostrar los datos de todas las tuplas que hayamos insertado desde
                                                                        PHPMyAdmin en la tabla ejemplos de la base de datos mySQL es el siguiente:

                                                                        /ejemplo/media/plantillas/es/base_web.html

                                                                        <html>
                                                                        <head>
                                                                        <title>#titulo# - P&aacute;gina de ejemplo</title>
                                                                        </head>
                                                                        <body>
                                                                        #contenido#
                                                                        </body>
                                                                        </html>

                                                                             Información: el contenido entre almohadillas “#” son las etiquetas que se
                                                                        reemplazarán mediante la clase zen_plantilla.

                                                                        En la plantilla colocaremos las etiquetas desde index.php, #contenido# se reemplazará
                                                                        por:

                                                                        /ejemplo/media/plantillas/es/ejemplo.html

                                                                        <table>
                                                                        <thead>
                                                                         <th>IDE</th>
                                                                         <th>T&iacute;tulo</th>
                                                                         <th>Texto</th>
                                                                         <th>Fecha</th>
                                                                         <th>Imagen</th>
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                         <th>Fichero</th>
                                                                        </thead>
                                                                        <tbody>
                                                                         #listado_ejemplos#
                                                                        </tbody>
                                                                        </table>

                                                                              En esta plantilla colocaremos en la etiqueta #listado_ejemplos# la siguiente
                                                                        información procesada por el visualizador del modelo de datos asociado,i.e.,una
                                                                        repetición de la siguiente plantilla (procesada: reemplazando los campos) por cada tupla
                                                                        de la tabla ejemplos:

                                                                        /ejemplo/media/plantillas/es/listado_ejemplos.html

                                                                        <tr>
                                                                        <td><b>#ide#</b></td>
                                                                        <td><input type="text" value="#titulo#"></td>
                                                                        <td><textarea rows=3 cols=6>#texto#</textarea></td>
                                                                        <td>#fecha#</td>
                                                                        <td><img src="/media/img/#imagen#></td>
                                                                        <td><a href="/media/ficheros/#fichero#" target="_blank">#fichero#</a>
                                                                        </td>
                                                                        </tr>




                                                                             Nota : el directorio /media/plantillas/es/ significa que se usa el idioma español…

                                                                                      “PHP para seres humanos”
                       7
Procesando los datos:

                                                                        Ya estamos en condiciones de ver el código de /ejemplo/index.php para que la clase
                                                                        ejemplo instanciada como $zen->ejemplo nos haga todo el trabajo „interno‟

                                                                        Cambiamos el contenido del comentario de /ejemplo/index.php :

                                                                        #espacio para insertar el contenido procesado por el controlador

                                                                        Por :

                                                                        //El formato de la llamada a la función de listado del visualizador es:
                                                                        //listado($fichero,$fichero_base,$marca_base,$reemplazos_base,$reemplazos_d
                                                                        atos)
                                                                        //para nuestro ejemplo sólo utilizaremos los 3 primeros parámetros
                                                                        $contenido['contenido'] = $zen->ejemplo->controlador->procesar($_REQUEST);
                                                                        //Solo queda mostrar el contenido por pantalla:
                                                                        $zen->html->mostrar($contenido,'base_web.html');

                                                                        Para que la función procesar del controlador del modelo de datos haga lo que nosotros
                                                                        necesitamos ,esto es: que por defecto muestre un listado de tuplas ,añadiremos una clase ,
                                                                        que será la que realice las tareas del controlador , en

                                                                        /ejemplo/clases/clase_controlador_ejemplo.php

                                                                        <?php
                                                                        Class controlador_ejemplo extends zen_controlador_modelo_datos {
                                                                         //constructor
                                                                         function controlador_ejemplo(&$_padre){
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                         //Recordar siempre llamar al constructor de la clase que hereda:
                                                                           parent::zen_controlador_modelo_datos($_padre);
                                                                         }
                                                                        //Nuestra funcion procesar sobrecargada de la que se hereda del padre
                                                                        function procesar(&$datos){
                                                                          return $this->padre->html->
                                                                               listado('listado_ejemplos.html','ejemplo.html','listado_ejemplos');
                                                                          }
                                                                        }
                                                                        ?>



                                                                              Básicamente lo que hace es llamar al visualizador y decirle que cargue los datos del
                                                                        modelo de datos reemplazando el contenido de las plantillas usando
                                                                        listado_ejemplos.html para ir mostrando todas las filas de tuplas,reemplazando las
                                                                        etiquetas de los campos,sobre la tabla HTML.




                                                                                       “PHP para seres humanos”
                       8
Tenemos la clase del controlador, sólo necesitamos cargarla en nuestra clase ejemplo,
                                                                        para ello vamos al código que habíamos escrito al principio y reemplazamos, de
                                                                        /ejemplo/clases/clase_ejemplo.php la cadena

                                                                        #ESPACIO RESERVADO PARA INICIALIZAR EL CONTROLADOR PROPIO

                                                                        Por

                                                                        //Necesitamos cargar la clase controlador de disco
                                                                        zen___carga_clase('controlador_ejemplo');
                                                                        //Ahora reemplazamos, haciendo sobrecarga sobre el puntero :
                                                                        $this->controlador =& new controlador_ejemplo($this);


                                                                        En este punto sólo nos queda correr la aplicación y comprobar que todo está funcionando
                                                                        correctamente, para ello vamos al navegador y escribimos la ruta

                                                                        http://servidor/ejemplo/
zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es




                                                                        www.zenphp.es
                                                                        zenphp :: Proyecto alojado en la Forja de Rediris

                                                                                      “PHP para seres humanos”
                       9

Contenu connexe

Tendances

Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
Pleased to meet you, Laravel
Pleased to meet you, LaravelPleased to meet you, Laravel
Pleased to meet you, LaravelRolando Caldas
 
2. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-20062. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-2006Samuel Marrero
 
Curso Java Avanzado 3 4 Js Ps Con Java Beans
Curso Java Avanzado   3 4 Js Ps Con Java BeansCurso Java Avanzado   3 4 Js Ps Con Java Beans
Curso Java Avanzado 3 4 Js Ps Con Java BeansEmilio Aviles Avila
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2César Hernández
 
Iniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebIniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebRightster
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQLWilian
 

Tendances (8)

Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
Pleased to meet you, Laravel
Pleased to meet you, LaravelPleased to meet you, Laravel
Pleased to meet you, Laravel
 
Sf2 pr5 mi primer proyecto
Sf2 pr5 mi primer proyectoSf2 pr5 mi primer proyecto
Sf2 pr5 mi primer proyecto
 
2. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-20062. Java Servlets (J2EE) - Curso 2005-2006
2. Java Servlets (J2EE) - Curso 2005-2006
 
Curso Java Avanzado 3 4 Js Ps Con Java Beans
Curso Java Avanzado   3 4 Js Ps Con Java BeansCurso Java Avanzado   3 4 Js Ps Con Java Beans
Curso Java Avanzado 3 4 Js Ps Con Java Beans
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2
 
Iniciación PHP 5. Programación Web
Iniciación PHP 5. Programación WebIniciación PHP 5. Programación Web
Iniciación PHP 5. Programación Web
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQL
 

Similaire à Construye un sistema MVC simple con PHP y zenphp

Framework kahana
Framework kahanaFramework kahana
Framework kahanaH31D1
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Estructura de Directorio de KumbiaPHP Framework versión 1.0 Spirit
Estructura de Directorio de KumbiaPHP Framework versión 1.0 SpiritEstructura de Directorio de KumbiaPHP Framework versión 1.0 Spirit
Estructura de Directorio de KumbiaPHP Framework versión 1.0 SpiritDeivinson Tejeda
 
Tutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHPTutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHPJuan Belón Pérez
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Framework 02
Framework 02Framework 02
Framework 02ronnyme21
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completogenaro martinez
 
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHPZenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHPJuan Belón Pérez
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC lissette_torrealba
 

Similaire à Construye un sistema MVC simple con PHP y zenphp (20)

Framework kahana
Framework kahanaFramework kahana
Framework kahana
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Estructura de Directorio de KumbiaPHP Framework versión 1.0 Spirit
Estructura de Directorio de KumbiaPHP Framework versión 1.0 SpiritEstructura de Directorio de KumbiaPHP Framework versión 1.0 Spirit
Estructura de Directorio de KumbiaPHP Framework versión 1.0 Spirit
 
Tutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHPTutorial A Z A - Programador PHP
Tutorial A Z A - Programador PHP
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
 
nn
nnnn
nn
 
Laravel
LaravelLaravel
Laravel
 
Laravel vc
Laravel vcLaravel vc
Laravel vc
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Framework 02
Framework 02Framework 02
Framework 02
 
php
phpphp
php
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHPZenphp - Presentación de Septiembre en la Etsiit - Programador PHP
Zenphp - Presentación de Septiembre en la Etsiit - Programador PHP
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC
 
Funciones en php
Funciones en phpFunciones en php
Funciones en php
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 

Plus de Juan Belón Pérez

Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, PalmAplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, PalmJuan Belón Pérez
 
Yahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blogYahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blogJuan Belón Pérez
 
Proyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3dProyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3dJuan Belón Pérez
 
Aecem - Libro Blanco - Para Programador Php.org
Aecem - Libro Blanco  - Para Programador Php.orgAecem - Libro Blanco  - Para Programador Php.org
Aecem - Libro Blanco - Para Programador Php.orgJuan Belón Pérez
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRJuan Belón Pérez
 
Composicion de servicios web, un ejemplo
Composicion de servicios web, un ejemploComposicion de servicios web, un ejemplo
Composicion de servicios web, un ejemploJuan Belón Pérez
 
Memoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHPMemoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHPJuan Belón Pérez
 
Depurando Java Script - Programador PHP
Depurando Java Script - Programador PHPDepurando Java Script - Programador PHP
Depurando Java Script - Programador PHPJuan Belón Pérez
 
Ensayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHPEnsayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHPJuan Belón Pérez
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHPJuan Belón Pérez
 
Bibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHPBibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHPJuan Belón Pérez
 
Aceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPAceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPJuan Belón Pérez
 
Introducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPIntroducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPJuan Belón Pérez
 

Plus de Juan Belón Pérez (20)

Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, PalmAplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
Aplicaciones y juegos para móbiles 2011: iOS, Android, Bada, Palm
 
¿Cómo elegir servidor web?
¿Cómo elegir servidor web?¿Cómo elegir servidor web?
¿Cómo elegir servidor web?
 
Yahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blogYahoo! pipes + Wordpress plugin - RSS POWER to your blog
Yahoo! pipes + Wordpress plugin - RSS POWER to your blog
 
Proyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3dProyecto Campos Electricos - Programador Servicios 3d
Proyecto Campos Electricos - Programador Servicios 3d
 
Aecem - Libro Blanco - Para Programador Php.org
Aecem - Libro Blanco  - Para Programador Php.orgAecem - Libro Blanco  - Para Programador Php.org
Aecem - Libro Blanco - Para Programador Php.org
 
Bpel y Open Esb
Bpel y Open EsbBpel y Open Esb
Bpel y Open Esb
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Composicion de servicios web, un ejemplo
Composicion de servicios web, un ejemploComposicion de servicios web, un ejemplo
Composicion de servicios web, un ejemplo
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Cómo elegir un servidor Web
Cómo elegir un servidor WebCómo elegir un servidor Web
Cómo elegir un servidor Web
 
Memoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHPMemoria Zenphp - Programador PHP
Memoria Zenphp - Programador PHP
 
Depurando Java Script - Programador PHP
Depurando Java Script - Programador PHPDepurando Java Script - Programador PHP
Depurando Java Script - Programador PHP
 
Zenphp - Programador PHP
Zenphp - Programador PHPZenphp - Programador PHP
Zenphp - Programador PHP
 
Ensayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHPEnsayo Cientifico - Programador PHP
Ensayo Cientifico - Programador PHP
 
Zen AJAX - Programador PHP
Zen AJAX - Programador PHPZen AJAX - Programador PHP
Zen AJAX - Programador PHP
 
Rendimiento Java Script - Programador PHP
Rendimiento  Java Script - Programador PHPRendimiento  Java Script - Programador PHP
Rendimiento Java Script - Programador PHP
 
Bibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHPBibliografia Y Menciones - Programador PHP
Bibliografia Y Menciones - Programador PHP
 
M V C - Programador PHP
M V C - Programador PHPM V C - Programador PHP
M V C - Programador PHP
 
Aceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHPAceleradores PHP Final - Programador PHP
Aceleradores PHP Final - Programador PHP
 
Introducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPIntroducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHP
 

Dernier

LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 

Dernier (20)

LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 

Construye un sistema MVC simple con PHP y zenphp

  • 1. TUTORIAL MVC CON Del 1-12-2007 al 15-12-2007 juaxix zenphp :: Proyecto alojado en la Forja de Rediris http://blog.zenphp.es Abstract ¡Aprendiendo zenphp! Construyendo un sistema MVC simple con PHP y zenphp En éste breve tutorial aprenderás cómo se construye un modelo de datos con el subsistema Modelo/Visualizador/Controlador de zenphp gracias a la ayuda de librerías estándar de PHP y las características de zenphp. Introducción Bienvenid@ al primer tutorial de construcción de aplicaciones con MVC de zenphp, es necesario que en tu servidor dispongas de la “Standard PHP Library”, tiene más ayuda disponible aquí. A partir de aquí estamos siguiendo una serie de pasos desde 0 necesarios para un sistema completo pero sencillo de entender y construir. La entrada Un punto importante a tener en cuenta es que el sistema comienza siempre en el mismo sitio, desde donde se dirige a la parte del mismo que ha de tomar el control, lógico, ¿no? Para que ésta idea funcione hemos de decirle al servidor Apache que nos lleve al punto inicial desde donde queremos mantener el orden, para ello necesitamos establecer ciertas reglas de “redirección” y que se escriben en el fichero .htaccess del directorio raíz de la aplicación : “/htdocs/aplicaciones/aplicación”, Ver aplicaciones de AddDefaultCharset UTF-8 RewriteEngine on ejemplo RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?route=$1 [L,QSA] Esto es precisamente lo que se hace en Django al establecer las reglas dentro de route.py  1 “PHP para seres humanos”
  • 2. Primero comprobamos si existe el comando RewriteCond,ya que si no existe redireccionaremos desde el fichero index.php.Sin embargo se ha de comprobar además si existe el fichero para poder seguir redireccionando imágenes y otros ficheros. Si no podemos usar .htaccess o mod_rewrite, tendremos que realizar las peticiones de redirección manualmente…mediante una clase, zen_enrutador, lo que quiere decir que todos los enlaces deben de estar en la forma "index.php?ruta=[la-peticion-aqui]", e.j. index.php?ruta=productos/indice. ¿Cómo funciona en Apache? zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es Conclusiones: no siempre podremos utilizar las redirecciones en Apache por motivos de seguridad del servidor ,por lo tanto podemos construir nuestras aplicaciones manteniendo toda la lógica del programa pero haciendo un pequeño cambio en la llamada a la clase que “enruta” todas nuestras direcciones al punto inicial, en lugar de utilizar directorio/aplicación/módulo_o_componente utilizaremos un simple cambio: directorio/index.php/aplicación/módulo_o_componente De forma que el zen_enrutador se da cuenta de dónde vienen las “direcciones” virtuales para realizar correctamente las llamadas a las partes de la aplicación del usuario.  Nota: tomaremos como directorio principal /ejemplo/ “PHP para seres humanos” 2
  • 3. Veamos,a grandes rasgos,qué es lo que necesitamos: programas:/ejemplo/index.php, /ejemplo/clases/clase_ejemplo.php, plantillas en: /ejemplo/plantillas/html y /ejemplo/css (ver más abajo con la creación de las 3 plantillas HTML) clase_ejemplo.php Entrada/Salida de la aplicación zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es /ejemplo/index.php Plantillas.html Plantillas.xml clase_ejemplo que contiene el conjunto Plantillas.xslt MVC Plantillas.css “PHP para seres humanos” 3
  • 4. Ahora que tenemos todas las peticiones funcionando y conocemos el esquema del flujo de información desde un único punto de entrada podemos empezar a escribir el fichero index.php. Pero primero vamos con unas tareas iniciales,como crear los directorios de aplicaciones y clases,así como de contenidos. En “media” es donde colocamos las imágenes ,plantillas,css,idiomas, etc. Y si tenemos un administrador, hacemos lo propio ya que son aplicaciones distintas,pero en un subdirectorio admin. Organizamos la estructura para que quede como en la captura fácil, ¿no? : Lista de directorios y subdirectorios de la captura: zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es  /ejemplo - + admin  clases  media  index.php - + aplicaciones - + clases  clase_ejemplo.php - + media  plantillas  es - + zenphp - index.php Se marca en negrita lo que vamos a construir a continuación…De forma que creamos un primer fichero llamado index.php en /ejemplo/index.php con el siguiente contenido: <?php # Tareas de inicialización (cargar el sistema, etc) require('zen.php'); //Carga las clases,configuraciones y funciones //fundamentales #espacio para añadir la instancia de la clase_ejemplo a continuación ?> “PHP para seres humanos” 4
  • 5. El fichero zen.php realiza todas tareas de inicialización general, esto es :la definición de constantes, (todas las de zenphp empiezan por ZF_) ,establecer el nivel de control de errores dependiendo de si estamos en modo depuración o no,cargando funciones y clases generales ( todas empiezan por zen_ ), etc. Puedes aprovechar este momento para echarle un vistazo al contenido de zen.php Lo siguiente que debemos hacer es crear la clase_ejemplo para almacenarla en /ejemplo/clases/clase_ejemplo.php e instanciarla dentro de /ejemplo/index.php. En zenphp se intentan abolir el uso de variables globales y toda la información fluye a través de un sistema de padres e hijos como en Java ,el sistema MVC está basado en esta teoria,y se usa para transportar los datos a través del sistema sin tener que usar $GLOBALS. El manual sobre usar variables globales en PHP es recomendado en este momento. La clase más importante es el modelo de datos ( zen_modelo_datos ) ya que es la que conecta los 3 objetos que forman el MVC, para utilizarla creamos una clase que contendrá el acceso a una o varias tablas de la base de datos de forma que en una sóla variable disponemos del acceso al modelo, el visualizador y el controlador. /ejemplo/clases/clase_ejemplo.php: <?php Class ejemplo extends zen_modelo_datos { /** * Aplicación a la que se vincula el modelo de datos obligatoriamente zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es * @var zen */ var $padre; //Todo: modelo de datos está asociado a una aplicación /** * Constructor :: MVC->Modelo , necesita una aplicación padre * Devuelve un modelo de datos * * @param zen $_padre * @return ejemplo */ function ejemplo(&$_padre){ /* Ahora tenemos que llamar al constructor de la clase que heredamos que tiene el formato siguiente : zen_modelo_datos($padre,$campos,$tablas,$hijo,$condiciones_where); campos son los campos de las tablas, hijo es la subclase de esta si existiera condiciones_where sirve para limitar los datos mediante instrucciones where en sintaxis SQL, ejemplo : "where ide=1". Notas: $padre es un tipo „zen‟; $hijo y $condiciones_where son opcionales */ parent:: zen_modelo_datos($this,"ide,titulo,texto,fecha,imagen,fichero" ,"ejemplos",null,""); #ESPACIO RESERVADO PARA INICIALIZAR EL CONTROLADOR PROPIO } } //fin de la clase ejemplo en /ejemplo/clases/clase_ejemplo.php ?> “PHP para seres humanos” 5
  • 6. Hecho esto ya disponemos de un modelo de datos listo para usar, pero antes necesitamos la tabla de donde extraer los datos: Para la tabla „ejemplos‟ podemos utilizar la siguiente consulta SQL: CREATE TABLE `ejemplos` ( `ide` INT NOT NULL AUTO_INCREMENT , `titulo` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `texto` TEXT CHARACTER SET utf8 COLLATE utf8_bin, `fecha` DATE NOT NULL , `imagen` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `fichero` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , PRIMARY KEY ( `ida` ) ) TYPE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin; Podeis utilizar PHPMyAdmin o bien usar una línea para ello desde php: <?php zen_basedatos:: crear_tabla ('`ejemplos` ( `ide` INT NOT NULL AUTO_INCREMENT , `titulo` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `texto` TEXT CHARACTER SET utf8 COLLATE utf8_bin, `fecha` DATE NOT NULL , `imagen` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `fichero` VARCHAR( 150 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , PRIMARY KEY ( `ida` ) ) TYPE = MYISAM CHARACTER SET utf8 COLLATE utf8_bin;'); ?> Ahora que hemos creado la clase alojada en /clases/clase_ejemplo.php , podemos completar el código inicial de /ejemplos/index.php reemplazando el comentario #espacio para añadir la instancia de la clase_ejemplo a continuación Por : zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es $zen =& new zen(); //Crea una aplicación donde alojar el modelo de datos zen___carga_clase('ejemplo'); //Carga la clase ejemplo para poder instanciarla $zen->ejemplo =& new ejemplo($zen); //Asocia el padre como la aplicación principal //Si se quiere se puede añadir una condición a asegurar de la forma assert(is_a($zen->ejemplo,'ejemplo')); //Ya tenemos la clase instanciada,el modelo se carga automáticamente con el // visualizador y el controlador por defecto,ahora podemos empezar con el // contenido: $contenido = array(); //Contenido dinámico a mostrar $contenido['titulo'] = "Listado de ejemplo"; #espacio para insertar el contenido procesado por el controlador Ahora la variable $zen->ejemplo tiene todo lo necesario para operar con los datos, gestionar las entradas y salidas así como mostrar las salida estándar con HTML. Vamos a usar PHPMyAdmin para insertar una tupla de ejemplo ya que el administrador interno de la web no nos interesa en este momento. Para mostrar dicha tupla crearemos una plantilla simple que utilizaremos desde el visualizador dentro de la clase_ejemplo::zen_html_modelo_datos, a la que accedemos en nuestro ejemplo desde $zen->ejemplo->html “PHP para seres humanos” 6
  • 7. El código para mostrar los datos de todas las tuplas que hayamos insertado desde PHPMyAdmin en la tabla ejemplos de la base de datos mySQL es el siguiente: /ejemplo/media/plantillas/es/base_web.html <html> <head> <title>#titulo# - P&aacute;gina de ejemplo</title> </head> <body> #contenido# </body> </html> Información: el contenido entre almohadillas “#” son las etiquetas que se reemplazarán mediante la clase zen_plantilla. En la plantilla colocaremos las etiquetas desde index.php, #contenido# se reemplazará por: /ejemplo/media/plantillas/es/ejemplo.html <table> <thead> <th>IDE</th> <th>T&iacute;tulo</th> <th>Texto</th> <th>Fecha</th> <th>Imagen</th> zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es <th>Fichero</th> </thead> <tbody> #listado_ejemplos# </tbody> </table> En esta plantilla colocaremos en la etiqueta #listado_ejemplos# la siguiente información procesada por el visualizador del modelo de datos asociado,i.e.,una repetición de la siguiente plantilla (procesada: reemplazando los campos) por cada tupla de la tabla ejemplos: /ejemplo/media/plantillas/es/listado_ejemplos.html <tr> <td><b>#ide#</b></td> <td><input type="text" value="#titulo#"></td> <td><textarea rows=3 cols=6>#texto#</textarea></td> <td>#fecha#</td> <td><img src="/media/img/#imagen#></td> <td><a href="/media/ficheros/#fichero#" target="_blank">#fichero#</a> </td> </tr> Nota : el directorio /media/plantillas/es/ significa que se usa el idioma español… “PHP para seres humanos” 7
  • 8. Procesando los datos: Ya estamos en condiciones de ver el código de /ejemplo/index.php para que la clase ejemplo instanciada como $zen->ejemplo nos haga todo el trabajo „interno‟ Cambiamos el contenido del comentario de /ejemplo/index.php : #espacio para insertar el contenido procesado por el controlador Por : //El formato de la llamada a la función de listado del visualizador es: //listado($fichero,$fichero_base,$marca_base,$reemplazos_base,$reemplazos_d atos) //para nuestro ejemplo sólo utilizaremos los 3 primeros parámetros $contenido['contenido'] = $zen->ejemplo->controlador->procesar($_REQUEST); //Solo queda mostrar el contenido por pantalla: $zen->html->mostrar($contenido,'base_web.html'); Para que la función procesar del controlador del modelo de datos haga lo que nosotros necesitamos ,esto es: que por defecto muestre un listado de tuplas ,añadiremos una clase , que será la que realice las tareas del controlador , en /ejemplo/clases/clase_controlador_ejemplo.php <?php Class controlador_ejemplo extends zen_controlador_modelo_datos { //constructor function controlador_ejemplo(&$_padre){ zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es //Recordar siempre llamar al constructor de la clase que hereda: parent::zen_controlador_modelo_datos($_padre); } //Nuestra funcion procesar sobrecargada de la que se hereda del padre function procesar(&$datos){ return $this->padre->html-> listado('listado_ejemplos.html','ejemplo.html','listado_ejemplos'); } } ?> Básicamente lo que hace es llamar al visualizador y decirle que cargue los datos del modelo de datos reemplazando el contenido de las plantillas usando listado_ejemplos.html para ir mostrando todas las filas de tuplas,reemplazando las etiquetas de los campos,sobre la tabla HTML. “PHP para seres humanos” 8
  • 9. Tenemos la clase del controlador, sólo necesitamos cargarla en nuestra clase ejemplo, para ello vamos al código que habíamos escrito al principio y reemplazamos, de /ejemplo/clases/clase_ejemplo.php la cadena #ESPACIO RESERVADO PARA INICIALIZAR EL CONTROLADOR PROPIO Por //Necesitamos cargar la clase controlador de disco zen___carga_clase('controlador_ejemplo'); //Ahora reemplazamos, haciendo sobrecarga sobre el puntero : $this->controlador =& new controlador_ejemplo($this); En este punto sólo nos queda correr la aplicación y comprobar que todo está funcionando correctamente, para ello vamos al navegador y escribimos la ruta http://servidor/ejemplo/ zenphp :: Proyecto alojado en la Forja de Rediris.es // www.zenphp.es www.zenphp.es zenphp :: Proyecto alojado en la Forja de Rediris “PHP para seres humanos” 9