Zend Expressive: instalar aplicación esqueleto con Composer

Con la aprobación del PSR-7 (PHP Standard Recommendation #7) el mundo de los frameworks en PHP cambió. Este nuevo estándar define interfaces de mensajes sobre HTTP, es decir una forma de manejar de la misma forma los parámetros vinculados a una petición y a la respuesta de un servidor. No me voy a detener sobre PSR-7 en este artículo así que si les interesa saber más sobre este estándar les recomiendo el siguiente enlace: From HTTP Messages to PSR-7: What’s It All About?

En base a PSR-7 surgen los middlewares, que no es nada más y nada menos que código que se incluye en el medio entre la petición y la respuesta. Haciendo pasar la información por distintas capas para procesarla, filtrarla y redireccionarla si es necesario. Lo mejor que tienen los middlewares es que se pueden reutilizar continuamente. Además uno puede llamar a otro, de forma que se pueden anidar. Mucho del trabajo que estábamos acostumbrados a incluir en el momento de carga del framework, o al principio de los controladores (autenticación y autorización, validaciones de tipo de petición y validaciones de formulario incluso) ahora pueden ir directamente cada uno en un middleware y pueden ser llamados en el orden que uno prefiera para filtrar la petición y generar la respuesta.

Desde entonces muchos frameworks fueron agregando soporte para PSR-7. Así fue como lo hicieron Symfony, Slim, Laravel y, por supuesto, Zend Framework, con el módulo llamado zendframework/zend-diactoros, una implementación de PSR-7. Hoy en día, casi todos los frameworks modernos ya lo implementan.

¿Qué es Zend Expressive?

Zend Expressive es más que un framework, un micro framework, que permite construir aplicaciones middleware basados en PSR-7. ¿Qué tipo de aplicaciones? Básicamente cualquier cosa, al igual que con Zend Framework. Particularmente me parecen más útiles para construir APIs, pero no hay límite al respecto.

Lo interesante de Zend Expressive es que permite utilizar los componentes que uno prefiera. Están para elegir los de Zend Framework, pero también hay otros de proyectos que seguramente habrán escuchado hablar o incluso usado al trabajar con otras tecnologías de PHP.

¿Qué diferencia hay con Zend Framework 3?

Ambos están preparados para PSR-7. La principal diferencia es que Expressive no incluye el módulo zend-mvc. Ese es prácticamente el módulo que define a Zend Framework como un framework grande. El resto de los paquetes de Zend pueden ser utilizados en ambos frameworks gracias a Composer, aunque digamos que cada uno utiliza un conjunto de paquetes estándar predefinido. Según los paquetes que se usen la línea para diferenciarlos quizás pueda volverse muy tenue. Pero podemos ver a Zend Framework en su última versión, la 3, como un framework grande, robusto, pesado, al estilo antiguo. Zend Expressive, por el contrario, es liviano y moderno.

Si nunca usaron Zend Framework 2 y están buscando empezar con alguna tecnología de Zend, lo mejor sería empezar directamente con Zend Expressive.

Instalar Zend Expressive vía Composer paso a paso

Hay un excelente tutorial para instalar la aplicación esqueleto de Zend Expressive. Pero la traduciré aquí y le agregaré algunos comentarios que me parecen interesantes.

En una terminal corremos el comando de instalación con Composer.

A continuación, el instalador nos preguntará qué tipo de instalación preferimos. La opción recomendada es la 3: Modular.

zend expressive instalación

La siguiente pregunta es qué tipo de de contenedor de inyección de dependencias queremos usar. La opción recomendada es la 3: Zend ServiceManager. Si usaron Zend Framework les resultará familiar.

zend expressive dependecy injection

Definido eso, nos preguntará qué tipo de router preferimos. Si usaron alguna vez el de Zend, se habrán agarrado la cabeza con ZendRouter porque si bien es muy poderoso, cuesta domarlo. La opción recomendada por Expressive es FastRoute y es también mi recomendación.

expressive - route

Ahora la pregunta está relacionada a qué tipo de template engine vamos a utilizar. Si quieren usar el de Zend Framework, es decir Zend View, se instalará también Zend ServiceManager. Yo recomiendo usar Twig que es simple y es el que usa Symfony. Quizás al principio les cueste si están acostumbrados a Zend View o incluso a Blade, de Laravel, pero como todo, se aprende. Por supuesto, si estamos construyendo una API que no requiere el manejo de vistas con templates, podemos elegir la opción “n” para no seleccionar ninguna.

template engine expressive

Finalmente nos preguntan cómo queremos manejar los errores. Si usaron versiones previas de Laravel les sonará Whoops. A mí no me termina de cerrar porque a la hora de debuggear es molesto. Pueden elegir no usar manejadores de errores.

zend expressive error handler

Luego, Composer se tomará unos momentos para instalar y configurar la aplicación esqueleto de Zend Expressive.

Una vez que esté todo instalado, podemos ver el resultado. ¿Alguien dijo Apache? Adonde vamos no necesitamos Apache. Podemos ejecutar en una terminal un servidor de PHP con el siguiente comando, si nos ubicamos en el directorio raíz del proyecto. Tengan cuidado al seleccionar el puerto. Eviten usar uno donde ya esté otro servidor escuchando, como por ejemplo el mismísimo Apache. Si eligen un puerto ocupado, recibirán un error (reason: Address already in use)

Si accedemos a través de un navegador a la URL http://localhost:8080, veremos la pantalla de bienvenida de Zend Expressive.

zend expressive bienvenida

Soy programador web freelancer y me he desempeñado como Líder Técnico y Líder de Proyectos. Trabajo con tecnologías como PHP, Javascript, MySQL y HTML5 para el desarrollo de sitios y sistemas web. Me especializo en Zend Framework y otros frameworks MVC, como también en WordPress y otros CMS. Me apasiona el liderazgo técnico de equipos aplicando metodologías ágiles de desarrollo.
Vivo en Buenos Aires, Argentina.
 

Deja un comentario

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

*