KAIZEN.
Mejoramiento continuo en la vida personal, familiar, social y de trabajo, que involucra a todos los actores de un proyecto por igual.Nuestra forma de vida merece ser mejorada constantemente creando estrategias de desarrollo orientadas a procesos con el fin asegurar el mejoramiento continuo

jueves, 13 de septiembre de 2007

Zend_Controller quick start (del manual de zend framework)

Introduccion
Zend_Controller es el corazon del sistema Zend Framework's MVC.
MVC es el soporte para el modelo Model-View-Controller , el cual es un patron de diseño que apunta a separar la logica de la aplicacion de la logica de la presentacion.
Zend_Controller_front implementa a Front Controller pattern, en el cual todas las paticiones son interceptadas por el front controller y despachadas a un Action Controllers individual basados en la URL solicitada.

Descripcion Front Controller Patterns.
El Front Controller maneja todos los requerimientos de una aplicacion basada en Web decidiendo que es lo siguiente que sucederá.
Es un patterns bien conocido en la especificacion de J2EE y comun su uso en frameworks como Jakarta Struts.

Martin Fowler, en "Patterns of Enterprise Application Architecture" realiza un buen trabajo discutiendo en general las entradas y salidas de un Front Controller, las que resume de la siguiente manera:

“Un Front Controller maneja todas las llamadas a un sitio Web, y es generalmente estrucurado en dos partes: un manejador Web( Web handler) y una jerarquia de comandos(a command hierarchy).”

El termino “Web handler” se refiere a la logica que examina las solicitudes entrantes HTTP para recoletar la suficiente informacion para saber que hacer con ella, mientras el “command hierarchy” es una especie de estructura organizacional, donde el Front Controller hace referencia a él, para decidir que es lo proximo a hacer, basado en la informacion brindada por el “Web handler”.


El sistema de Zend_Controller fue construido pensando en su extensibilidad, donde podemos realizar sub clases de las clases existentes, escribiendo las nuevas clases que ponen en ejecucion las diversas interfaces y las clases abstractas que forman el conjunto de clases de la familia controller, o escribiendo plugins o action helpers para aumentar o para manipular la funcionalidad del sistema.

Ejemplo.
Crear la siguiente estructura de directorios.


application/
controllers/
IndexController.php
models/
views/
scripts/
index/
index.phtml
helpers/
filters/
html/
.htaccess
index.php


Ahora en tu web server, señala tu documento raiz al directorio HTML de la disposición antedicha del sistema de ficheros.

Crea tus reglas rewrite
editar el html/.htaccess para que quede de la siguiente manera.

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

Las reglas antedichas encaminarán cualquier petición del "no-recurso" (imágenes, stylesheets) al front controller. Si existen otras extensiones que desea excluir del front controller (PDF's,text files,etc), agregue esas extenciones al switch, o cree sus propias reglas rewrite.

Cree su propio archivo bootstrap
El archivo bootstrap es la pagina donde todos los requerimientos son ruteados --html/index.php en nuestro ejemplo.
<?php
require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('/path/to/app/controllers')

Antes de discutir las acciones del controlador, deberiamos primero entender como las solicitudes son ruteadas en Zend Framework. Por defecto, el primer segmento del la URL mapea el controlador, y el segundo la accion. Por ejemplo dada la siguiente URL http://framework.zend.com/roadmap/components, el camino es /roadmap/components, la cual mapeara el controlador roadmap y la accion components.
En el caso de no proporcionar una accion, la accion index is asumida, y si no se ha proporcionado un controlador, el controlador index es asumido, (después de la convención de Apache que mapea un DirectoryIndex automáticamente).

El despachador de Zend_Controller despues toma el valor controlador y lo mapea a su clase. Por defecto, toma el nombre del controlador y le agrega la palabra controller. En el caso anterior el controlador roadmap es mapeado a la clase RoadmapController

De manera similar la "accion" es mapeada al metodo de la clase controladora. Por defecto, el valor es en minusculas, y luego la palabra "Action" es agregada. En nuestro ejemplo la accion components se transforma en componentsAction, y el metodo final es llamado de la sigiente manera:
RoadmapControler::componentsAction();

Vamos a crear una accion controladora por defecto y un metodo accion. Como lo mencionamos con anterioridad, el controlador por defecto y la accion son llamados ambos "index". Abrimos el archivo application/contollers/IndexController.php, y digitamos lo siguiente

<?php


/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
}
}


Por defecto la accion del ayudante ViewRenderer esta habilitada. Lo qie esto significa es que simplemete definiendo un metodo action y su correspondiente script view, se obtendra inmediatamente el contenido volcado. Por defecto , Zend_View es usado como la capa de vista(view layer) del MVC. El VewRenderer hace algo magico, y usa el nombre del controlador (ej. index) y su actual nombre de accion (ej. index) que template usar. Por defecto los template tienen la extension .phtml, esto significa que , en el ejemplo anteriror, el template index/index.phtml sera ejecutado, adicionalmente el ViewRenderer automaticamente asume que el directorio de las vistas , y que el el actual view script estaran en el subdirectorio /views/scripts/, ademas, el templete mostrado lo podremos encontrar en application/views/scripts/index/index.phtml.

Creando nuestro View Script

Como mencionamos anteriormente , los view scripts son encontrados en application/views/scripts/; el ciew script por defecto para el controlador y la accion estan en application/views/scripts/index/index.phtml, por lo tanto vamos a crear este archivo y escribirle agun codigo html:


<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>My first Zend Framework App</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>


Crear nuestro controlador de errores (error controller)
por defecto esta registrado el plugin manejador de errores. Este plugin espera que exista un controlador para el manejo de errores. Por defecto. este asume un ErrorController en el modilo por defecto con un metodo errorAction:
<?php
/** Zend_Controller_Action */
require_once 'Zend/Controller/Action.php';

class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
}
}

Si se asume que la disposición de directorios es la ya discutida, este archivo entrará en application/controllers/ErrorController.php. Tambien se necesitara crear un view script en application/views/scripts/error/error.phtml, donde el contenido de ejemplo puede lucir de la siguiente forma.

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Error</title>
</head>
<body>
<h1>An error occurred</h1>

<p>An error occurred; please try again later.</p>
</body>
</html>


Vista del sitio
Con tu primer controlador y vista (view) bajo nuestro dominio, puedemos ahora acceder desde nuestro browser y hojear al sitio. Si se asume que example.com es tu dominio,accediento a cualquiera de las siguientes URL's obtendremos la pagina que acabamos de crear.
*http://example.com/
*http://example.com/index
*http://example.com/index/index

No hay comentarios: