Este documento explica cómo usar el scaffolding en zenphp para crear fácilmente un acceso a los datos de una base de datos. Se describe cómo crear una aplicación simple con un modelo asociado, añadir el scaffolding al modelo y probarlo. El scaffolding de zenphp genera automáticamente formularios para listar, agregar y editar registros de una tabla de base de datos.
1. El Scaffolding de zenphp
Serie de manuales sencillos IV
PROYECTO : ZENPHP
Marzo - 2008
El Scaffolding de zenphp |
Autor: Juan Belón Pérez
http://blog.zenphp.es
1
2. Introducción:
Manual para empezar a usar
Scaffolding
zenphp : zen_andamio (scaffolding)
¿Qué es scaffolding?
Un método sencillo de acceso a los datos de la base de
datos.
Un ejemplo de una aplicación que usa scaffolding es PhpMyAdmin, aunque podemos
encontrar esta técnica muy extendida en conjuntos de librerías de programación PHP
como CakePHP, Symfony o CodeIgniter y además en Ruby on Rails.
En este documento se explica cómo construir fácilmente un acceso a dicha técnica…
El Scaffolding de zenphp |
https://forja.rediris.es/projects/csl2-zenphp/
2
3. El Scaffolding de zenphp en 10 minutos
1. Crear una aplicación sencilla con un modelo asociado.
2. Añadir el scaffolding al modelo asociado de la aplicación.
3. Probar Scaffolding
1. Crear una aplicación SENCILLA con un modelo asociado
Para este ejercicio deberemos tener descargado zenphp, esto podemos hacerlo
directamente de la página web o bien descargarlo por SVN con el comando:
svn checkout https://forja.rediris.es/svn/csl2-zenphp/trunk zenphp
y colocar dicho directorio en nuestro directorio de pruebas, ejemplo: /htdocs/miweb de
forma que queda tal como /htdocs/miweb/zenphp
Configura en /htdocs/miweb/zenphp/zen.php las 3 primeras constantes.
La aplicación por defecto de zenphp se llama prueba y se encuentra en
/htdocs/miweb/zenphp/aplicaciones/prueba.php
dicha aplicación es llamada desde /htdocs/miweb/index.php, abre este fichero y añade
justo debajo de “var $html;” el siguiente código PHP:
/**
* @var posts
*/
var $posts;
Con esto estarás añadiendo una variable a la aplicación prueba y ahora vamos a crear el
modelo asociado, para ello necesitamos crear un fichero en
/htdocs/miweb/aplicaciones/modelos/posts.php
con la definición del modelo, realmente ni siquiera necesitamos el fichero,bastaría con
añadirlo justo debajo de la clase prueba pero así tendremos las cosas mucho más claras.
Por suerte he tenido la honradez de escribir el código del modelo de datos asociado:
El Scaffolding de zenphp |
1
4. <?php
class posts extends zen_modelo_datos {
/**
* La variable padre es sobrecargada, realmente no es necesaria
pero lo hago para
* que los editores me tomen el tipo de mi aplicación y no el de
zen_aplicacion y
* poder así acceder a los métodos de mi aplicación en el editor.
*
* @var prueba
*/
var $padre;
/**
* Constructor
*
* @param prueba $padre
* @return posts
*/
function posts(&$padre){
//Necesitamos llamar al constructor del padre para especificar
la configuración del modelo
// Si no colocamos los campos, el constructor de
zen_modelo_datos lee los campos de la tabla "posts"
// en otro caso, si se especifican se mantienen en la
configuración
parent::zen_modelo_datos($padre,"","posts");
}
}
?>
Ésta es la clase, pero ¿cómo la carga la aplicación?, para ello añadimos en
aplicaciones/prueba.php ,justo debajo de “$this->html =& new html_prueba($this);” la
línea:
zen___importar_modelos($this);
¿qué hace ésta línea?
es el equivalente a
______
require_once('modelos/posts.php');
$this->posts =& new posts($this)
______
si queremos importar sólo unos cuantos modelos podemos hacer lo siguiente:
zen___importar_modelos($this,"posts,noticias");
de esta forma estamos añadiendo sólo los modelos posts y noticias, que, además
automáticamente cargan sus vistas.
Las vistas son los controladores en zenphp, con,simplemente crear un fichero en
aplicaciones/vistas/html_posts.php se carga dicha vista y se asocia al modelo, si no se
El Scaffolding de zenphp |
crea dicho fichero se coloca una vista+controlador por defecto que es el
zen_html_modelo_datos.
Tras todos los cambios la clase de aplicaciones/prueba.php ha de quedar así:
2
5. <?php
class prueba extends zen_aplicacion { //zen_aplicacion extiende de zen
/**
* Visualizador HTML para la clase
*
* @var html_prueba
*/
var $html;
/**
* @var posts
*/
var $posts;
/**
* Constructor
* @param str $inicializadores clases separadas por comas, a
inicializar
* @return prueba
*/
function prueba($inicializadores=""){
parent::zen_aplicacion($inicializadores);
$this->html =& new html_prueba($this);
zen___importar_modelos($this); //Carga todos los modelos aqui
/* zen___importar_modelos es el equivalente a hacer para cada modelo:
---
require_once('modelos/posts.php');
$this->posts =& new posts($this);/
---
Podemos cargar sólo los modelos que necesitemos así:
zen___importar_modelos($this,"posts,noticias"); */
}
}
/**
* Para mostrar el HTML por pantalla con una plantilla
*/
class html_prueba extends zen_html {
/**
* Clase plantilla para leer y mostrar HTML
*
* @var zen_plantilla
*/
var $plantilla;
/**
* Constructor
*
* @param prueba $_padre
* @return html_prueba
*/
function html_prueba(&$_padre){
parent::zen_html($_padre);
El Scaffolding de zenphp |
//$this->plantilla =& new zen_plantilla("base_web.html"); //en
media/plantillas/es/base_web.html
//donde 'es' es el idioma por defecto, español
}
}
?>
Ahora podemos acceder al andamio del modelo post simplemente añadiendo la
variable andamio pero antes tendremos que crear la tabla en la base de datos,
3
6. recordemos que para configurar la base de datos necesitamos definir las constantes PHP
de la conexión, para ello disponemos del fichero aplicaciones/prueba.config.php, ábrelo
y coloca sus parámetros.
Para crear la tabla podemos usar PhpMyAdmin o bien los comandos de la clase
mediante la referencia a la base de datos en el constructor de prueba.php, justo antes
de “zen___importar_modelos($this);”:
$this->bd->crear_tabla("posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(50),
cuerpo TEXT,
creado DATETIME DEFAULT NULL,
modificado DATETIME DEFAULT NULL
);");
Basta con cargar en el navegador http://localhost/miweb/ y se creará automáticamente,
entonces podemos borrar la línea de creación.
2. Añadir S CAFFOLDING al modelo asociado de la aplicación
Para que se pueda acceder al andamio o scaffolding del modelo de datos vamos a
nuestra clase aplicaciones/modelos/posts.php y añadimos justo debajo de “var $padre”,
el siguiente código:
/**
* Scaffolding de zenphp
*
* @var zen_andamio
*/
var $andamio;
La variable se puede llamar de las formas que se hayan definido en
/htdocs/miweb/zenphp/zen.php -> ZF_PALABRAS_ANDAMIO, por defecto son scaffold y
andamio de forma que podemos acceder al Scaffold o Andamio por medio de la adición
de una de ellas en nuestro modelo de datos.
3. Probar S CAFFOLDING
Llendo a la dirección:
http://localhost/miweb/index.php/nombre_modelo_datos/andamio/
o bien
http://localhost/miweb/index.php/nombre_modelo_datos/scaffold/
En nuestro caso iremos a nuestro modelo posts mediante
El Scaffolding de zenphp |
http://localhost/miweb/index.php/posts/andamio/
Para ver el resultado de la operación debe devolver algo muy parecido a la siguiente
captura:
4
8. ¿Qué viene a continuación?
Lo único que resta ahora es editar los datos, el proceso del andamio contínua, estoy
desarrollando mejoras con los campos, edición con áreas de texto dinámicas, y otras muchas
mejoras que seguro son de agradecer…
Como se suele decir…
¡Sigan atentos a sus pantallas!
El Scaffolding de zenphp |
6