Hola Mundo! con Zend Framework 2

Continuando con los artículos sobre Zend Framework 2, en esta ocasión voy a mostrarles como hacer la primera aplicación propia que imprime en pantalla el clásico mensaje “Hola Mundo!”. Aprovechando la oportunidad, explicaré cómo se usa el patrón MVC, así que este primer programa integrará el modelo, la vista y el controlador.

A lo largo del artículo explicaré cómo crear un nuevo módulo, agregar un controlador, un modelo simple, una vista y algunas opciones básicas de configuración, partiendo siempre de la aplicación esqueleto que trae Zend Framework 2. Si aún no la instalaron, pueden leer el artículo anterior: Instalar aplicación esqueleto de Zend Framework 2.

Sin más preámbulos, comencemos.

Crear estructura de directorios como en la aplicación esqueleto

Vamos a necesitar una serie de directorios similar a los que trae la aplicación esqueleto. Luego, iremos creando y añadiendo los archivos que corresponden. La estructura que usaremos será la siguiente:

En el directorio module, debe crearse uno nuevo con el nombre del módulo. Dentro hay cuatro directorios. config tiene uno de los archivos de configuración del módulo: module.config.php. El otro es module.php, pero que se encuentra afuera.

Noten que luego de src, hay nuevamente otro directorio que debe tener el mismo nombre que el módulo. Y dentro de él están Controller y Model, que contienen los controladores y los modelos, respectivamente.

En view se guardan las vistas que generalmente son archivos HTML con algo de PHP, por eso llevan la extensión .phtml. En error, hay algunas plantillas básicas que usa el framework como el error 404 y una página de error genérica donde se direcciona cada vez que ocurre una excepción. Aparece, además, un directorio layout que contiene el archivo layout.phtml y que sirve como plantilla básica para cargar todas las vistas.

La vista vinculada al módulo creado tiene el mismo nombre pero en minúsculas (requerimiento del framework) y dentro, cada directorio debe tener el nombre del controlador y en cada uno de ellos, los archivos deben tener los nombres de las acciones. Se llama acción a cada método invocable del controlador.

Es necesario aclarar que esta estructura puede ser modificada, pero para nuestra primera aplicación es preferible mantener una que sea lo más parecida posible a la aplicación esqueleto.

Crear el controlador

Vamos a crear el controlador IndexController.php en module/HolaMundo/src/HolaMundo/Controller. Antes de entrar en el código, vamos a resumir lo que haremos en todo este artículo. Crearemos un controlador que será invocado al acceder a través del navegador web. Luego, este controlador accederá a un modelo que devolverá el mensaje “Hola Mundo!”. A continuación, ese mensaje se le pasará a la vista y allí se imprimirá.

Ahora sí, veamos qué tiene nuestro controlador:

Zend Framework 2 aprovecha los namespaces de PHP 5.3 así que lo primero que se escribe es el correspondiente al archivo que estamos creando. Luego, con use se van cargando las distintas clases que son necesarias. Para quienes no estén acostumbrados a use, el efecto es similar a utilizar un include o un require.

Puntualmente, AbstractActionController es un controlador genérico del cual heredará el nuestro. ViewModel es la vista que será lo que devolverán los métodos o acciones de nuestro controlador.

El controlador debe llevar un nombre que queramos seguido de la palabra Controller. De forma similar, los métodos invocables del controlador deben llevar un nombre cualquiera seguido de la palabra Action. No hay que olvidar agregar la palabra clave public para que puedan ser llamados desde afuera de la clase.

Dentro de las clases que incluimos, se encuentra el modelo que nos devolverá el mensaje que luego vamos a mostrar. La clase HolaMundo se instancia al principio del método indexAction. Luego, creamos un array que más tarde será pasado a la vista. A la clave saludo le asociaremos el valor que devuelve el modelo en el método getSaludo. Ya crearemos el modelo en el siguiente paso, por ahora, pensemos que ese método devolverá un string.

Finalmente, devolveremos un objeto de tipo ViewModel, al que le pasaremos el array con los datos que la vista necesitará.

Crear el modelo

Ahora veamos el modelo, cuyo nombre es HolaMundo.php y la ubicación module/HolaMundo/src/HolaMundo/Model/

Se añade arriba el namespace y luego se crea una clase común y corriente de PHP. Nuevamente el método es público y como podemos apreciar, no hace mucho. Simplemente devuelve el mensaje que luego mostraremos.

Crear la vista

La vista se compone de varios archivos. Los vinculados a errores, que se encuentran en module/HolaMundo/view/error, es decir, index.phtml y 404.phtml, pueden ser tomados de la aplicación esqueleto. En este ejemplo no serán necesarios en realidad, pero es recomendable tenerlos por si cometemos un error al crear nuestro módulo.

El archivo layout.phtml, que se encuentra en module/HolaMundo/view/layout es el que tendrá la estructura básica en HTML.

 

Este archivo HTML será el primero en cargarse luego del controlador. La primera línea sirve para cargar el doctype. Luego, en $this->content estará el contenido de nuestro controlador así que lo mostramos por medio de echo. Ya veremos cómo es que se vincula el controlador con la vista.

En module/HolaMundo/view/HolaMundo/index se encuentra el archivo index.phtml que tiene la vista particular vinculada a la acción.

Es tan solo una línea donde se muestra el mensaje “HolaMundo!”. La variable $this->saludo tiene el valor que pasamos a través del array en el controlador.

Resumiendo el proceso de la vista, el controlador devuelve un objeto ViewModel al que se le pasa un array con datos que se quieren pasar a la vista. Luego se carga el archivo layout.phtml. En $this->content estará el contenido completo de index.phtml y se mostrará. A su vez, en ambos archivos se puede acceder a los datos que se pasaron en el controlador.

Configuración en module.config.php

En la ruta HolaMundo/config hay un archivo muy importante de configuración del módulo: module.config.php. Se podría dedicar un artículo entero a este archivo, pero para este caso vamos a simplificar el asunto. Tomaremos el archivo original de la aplicación esqueleto y lo copiaremos a nuestro módulo. Allí le haremos algunas modificaciones y eliminaremos muchas líneas de código hasta dejarlo de la siguiente manera.

 

La primera modificación importante que haremos es agregar una ruta para que la URL que escribamos en el navegador sea identificada por el framework y la redireccione al controlador. Veamos lo que hay que agregar más en detalle

 

Al array routes le vamos a agregar una ruta nueva. Todo esto hará que cuando accedamos a http://localhost/ejemplo/public/holamundo podamos acceder al controlador que corresponde. Hay distintos tipos de rutas en Zend Framework 2, esta en particular se al conoce como literal. En options  y luego route se define la ruta que como ven es /holamundo y en defaults, el controlador y la acción a la cual se desea vincular dicha ruta.

En la sección controllers de este mismo archivo hay que hacer que el controlador creado sea invocable.

 

En el array invokables se pone como clave la ruta al controlador  sin “Controller” y el valor con la ruta completa. Si no hacemos esto, el framework no permitirá que el controlador sea cargado al acceder por el navegador.

En la sección view_manager está gran parte de la configuración de la vista. Lo que vamos a hacer es agregar el template que hemos creado. Es decir, el index.phtml que se asocia a la acción del controlador que hemos creado.

 

Debemos notar un detalle muy importante:

Si tenemos HolaMundo como nombre de módulo, entonces deberemos cambiar el camel case por palabras separadas de guiones, tal como se ve. Si no hacemos esto, el framework no vinculará la vista a la acción del controlador de forma automática. Ese vínculo debería hacerse de forma manual agregando una línea en el controlador que defina qué plantilla debe cargarse.

El resto del código que estaba en el original, de la aplicación esqueleto, puede ser descartado porque para este ejemplo no será necesario.

Luego de realizar este paso, al cargar la vista, automáticamente tendremos en $this->content el contenido de la vista asociada a la acción que se está ejecutando. Esta operación la hace el framework por dentro.

Archivo de configuración Module.php

No vamos a modificar casi nada de este archivo. Así que lo copiaremos directamente de la aplicación esqueleto y le modificaremos el namespace para adaptarlo a nuestro módulo.

 

Desactivar aplicación esqueleto y activar el módulo creado

A continuación le vamos a indicar al framework qué módulos estarán activos. El que se vincula a la aplicación esqueleto será desactivado y el que hemos creado, activado. Para realizar este procedimiento hay que modificar el archivo application.config.php que se encuentra en config, pero del directorio principal de la aplicación, fuera de la estructura de nuestro módulo.

Lo que podemos hacer es buscar el principio del archivo donde se muestran los módulos activos

Y cambiarlo por:

 

Visualizar el mensaje HolaMundo!

Finalmente, luego de haber hecho todos estos pasos, ya estamos en condiciones de poder visualizar el mensaje de saludo. Debemos acceder a http://localhost/ejemplo/public/holamundo donde ejemplo es el nombre del directorio donde hemos instalado Zend Framework 2.

El resultado debería ser el siguiente:

zend-hola-mundo

Resumiendo

Zend Framework 2 es un poco más difícil si lo comparamos con otros frameworks de PHP. Esto se puede apreciar con este primer ejemplo donde debimos realizar unos cuantos pasos para simplemente poder mostrar un mensaje de bienvenida. Sin embargo, en esta primera aproximación se pueden percibir algunas características importantes como la utilización de namespaces, el nivel de configurabilidad y la tendencia a modelar todo con objetos.

En siguientes artículos iremos explorando otras características de Zend Framework 2, entrando en detalle en aspectos que aquí simplemente han sido introducidos y extendiendo el conocimiento sobre otros que han quedado de lado.

Soy programador web y me desempeño como Líder Técnico y de Proyectos en Polar Bear Development. Trabajo con tecnologías como PHP, Javascript, MySQL y HTML5 para el desarrollo de sitios y sistemas web. Me especializo en Zend Framework 2 y otros frameworks MVC, como también en WordPress y otros CMS. Lidero equipos de desarrolladores trabajando con Scrum. Vivo en Buenos Aires, Argentina.
 

6 thoughts on “Hola Mundo! con Zend Framework 2

  1. Hola, muy bueno el tutorial. Hasta esta parte todo bien pero; ¿que sucedería si yo quisiera crear un modulo dentro de otro? es decir:
    Yo tengo en mi aplicación un modulo llamado Herramientas y quiero que dentro del modulo Herramientas exista otro llamado Office2007.
    ¿Cómo quedaría la estructura de carpeta y la configuración de los ficheros Module.php y module.config.php?
    Espero su respuesta y gracias de antemano.

  2. No he explorado demasiado el tema de la estructura de directorios. En teoría es posible darle la forma que uno necesite. Aunque lo de tener un módulo dentro de otro no lo termino de entender. ¿Te estarás refiriendo a una estructura tipo HMVC?

    ¡Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*