Comenzando con Symfony 5

Introducción

Desde hace mucho tiempo no escribo entradas para este blog. No es que me haya alejado de Symfony, sino que mis programas hasta el día de hoy seguían usando la versión 2.8, y no encontré nuevas cuestiones para principiantes que me interesara incorporar al blog.

Advertencia inicial: esta es una nota para principiantes, si se considera un usuario avanzado de Symfony 5, este artículo no es para Usted.

Hoy comienza una nueva etapa en mi experiencia de programación con Symfony. Trataré de aprender a usar la versión Symfony 5, que no solo es la última en ser desarrollada, sino que además, como dice su principal responsable Fabien Potencier en su libro «Symfony 5: La Vía Rápida»(1) se constituye en un hito, en la culminación de varios años de progreso de Symfony que parece haber alcanzado su pleno desarrollo con esta versión. En palabras textuales de Potencier: «Con la versión 5, es probable que el proyecto haya alcanzado su madurez. Siento que todo lo que hemos hecho en los últimos 5 años forma un gran conjunto. […]Nunca a sido tan divertido usar Symfony para un proyecto»(2)

Como vamos a utilizar Apache 2.4 como servidor web local, necesitamos instalar el paquete de Symfony apropiado para este tipo de servidor:

composer require symfony/apache-pack

Mi idea es, siguiendo el libro de Potencier, ir agregando entradas con mis comentarios acerca de los hallazgos, dificultades y avances en la compresión de la última versión de este potente software.

La Caja de Herramientas

Symfony puede correr en los sistemas operativos más utilizados, sea que tenga instalada alguna versión de Linux, MacOS o Windows. El primer requisito, obviamente, es disponer de una PC con alguno de estos sistemas operativos instalados.

Yo poseo una PC de escritorio con Windows 10 Pro version 1903 de 64 bits,  con 8 GB de RAM y procesador Intel Core i5 3.00 Gb. Como servidor web, instalé Xampp para Windows con la versión de PHP 7.4.7. Contar con una versión Windows 10 Pro, es indispensable para poder instalar con éxito Docker. Aunque hay una versión de Docker para Windows 7 y Windows 10 Home, no funcionan bien o es difícil de configurar.Potencier aconseja primero que nada, instalar una serie de herramientas de software que considera fundamentales para una mayor eficiencia en la programación con Symfony 5, e incluso para que el ejemplo que desarrolla a lo largo de su libro pueda funcionar. Pero lamento avisarte, que deberás hacer algún trabajo previo para llegar a tener en tu PC todas las herramientas de Symfony para desarrollar el ejemplo del libro, ya que no todo está tan a mano y hay que buscar en la Web. Las herramientas de software que sugiere Potencier en su libro son las que se enumeran a continuación.

Motor de Base de Datos y Software para gestionar mensajes

Potencier se inclina por elegir como motor de base de datos PostgreSQL y como gestionador de colas  de mensajes a RabbitMQ. Yo por mi parte, seguiré utilizando MariaDB ahora en su versión 10. Tengo toda mi experiencia de programador desarrollada con este motor de base de datos y me ha dado buenos resultados. No cabe duda que PostgreSQL es más robusto, cumple con mayor rigor que MySQL o MariaDB con una serie de requisitos de un buen motor de base de datos, pero como mis trabajos de programación hasta el momento los he desarrolado sin problemas con MariaDB, seguiré usando este motor de base de datos.

Necesitamos también un servidor web local que se complemente bien con MySQL o MariaDB, en mi caso elijo utilizar Apache 2.4. Instalo todo (motor de base datos y servidor web) a través del paquete Xampp, para mi caso, en su versión de 64 bits para Windows 10 y con PHP 7.4.

Como vamos a utilizar Apache 2.4 como servidor web local, necesitamos instalar el paquete de Symfony apropiado para este tipo de servidor:

composer require symfony/apache-pack

Este paquete, como lo explica el sitio de Symfony, instala el archivo .htaccess en la carpeta public/ que contiene las reglas necesarias para que un proyecto desarrollado con Symfony funcione bien con este servidor. Para más detalles puedes ver: https://symfony.com/doc/current/setup/web_server_configuration.html

Una vez instalado Xampp en tu PC con Windows 10, necesitas cambiar la configuración de dos archivos: php.ini y en Apache httpd.conf, a los que puedes acceder desde el panel de control de Xampp. En php.ini hay que habilitar las extensiones que exige el libro de Potencier para su correcto funcionamiento. También sería conveniente que configures la zona horaria de tu país. Y el puerto, si no deseas usar el que viene por defecto que es el puerto 80.

En el archivo de Apache httpd.conf, al final de todo, deberías incorporar esta configuración mínima que funciona bien para proyectos desarrollados con Symfony 5:

IDE (Entorno de Desarrollo Integrado)

En mi caso, como trabajo con Windows, sigo el consejo del autor del libro y elijo como IDE VisualStudioCode lo buscamos en la Web  lo descargamos e instalamos. Su uso es sin costo.

Yo por mi parte estoy acostumbrado a trabajar desde hace años con la IDE NetBeans que ya va por la versión 12. Tiene funcionalidades muy similares a VisualStudioCode y es también gratuita.

Terminal

Potencier aconseja, para los usuarios de Windows, con el fin de tener una terminal que trabaje bien, al programa Hyper. De nuevo: lo buscamos en la Web  lo descargamos e instalamos. Su uso es sin costo. También es muy útil usar el WindowsPowerShell que viene como parte de Windows.

Git

En Windows instalamos Git bash.Como lo recomienda Potencier en su libro, conviene tener un backup de nuestro proyecto en algún servidor remoto. Las copias y actualizaciones de archivos, las haremos en parte usando desde la linea de comandos, los comandos de Git, pero también resulta útil, si vas usar como respaldo a GitHub, descargar e instalar GitHubDesktop, un programa que te facilitará el respaldo de los archivos del proyecto en tu repositorio en GitHub.

PHP

Potencier sugiere tener instalado de modo local PHP, yo lo hago a través de la instalación de Xampp que en su última versión disponible al momento de escribir esta entrada contiene además del servidor Web Apache, la versión PHP 7.4.7. El autor nos pide que comprobemos (y si no están, instalarlas o habilitarlas) la existencia de las siguientes extensiones de PHP: intl , pdo_pgsql , xsl , amqp , gd , openssl y sodium También sugiere instalar o habilitar redis y curl. Instalaremos las extensiones amqp y redis ya que son necesarias para desarrollar el ejemplo del libro. En Xampp no vienen las librerias amqp y redis que habrá que buscar en repositorios de PHP en la Web.¿Dónde encontrar una extensión?Las extensiones de PHP generalmente se llaman “php_*.dll” (donde el asterisco representa el nombre de la extensión) y se localizan bajo la carpeta “php\ext”. En mi caso, como estoy usando PHP dentro de Xampp, la ruta completa sería: C:\xampp\php\extPHP se distribuye con las extensiones más útiles para la mayoría de desarrolladores. Se les llama extensiones del “núcleo”.En cualquier caso, si necesita una funcionalidad que no proporciona ninguna de las extensiones del núcleo, podrá buscarla en PECL. La Biblioteca de la Comunidad de Extensiones de PHP (PECL) es un repositorio de extensiones PHP, que proporciona un directorio de todas las extensiones conocidas, y aloja utilidades para descargar y desarrollar extensiones de PHP.Por ejemplo. La extensión amqp, la encuentras en:https://pecl.php.net/package/amqpUn artículo muy útil para instalar en forma exitosa amqp, lo encuentras aquí: https://dev.to/goceb/how-to-install-the-amqp-php-extension-on-windows–xampp-55fg Una vez descargadas estas librerías, hay que instalarlas, en el caso de Xampp, en la carpeta C:\xampp\php\ext y no olvidar habilitar las mismas introduciendo en el arhivo de configuración php.ini, las líneas:

extension=php_amqp.dll
extension=php_redis.dll

Para la extensión sodium, escribir la siguiente línera:

extension=php_sodium.dll

Composer

Otra herramienta indsipensable para trabajar con Symfony es Composer, un software que en forma automática gestiona las dependencias en cualquier programa que desarrollemos con Symfony. Otra vez: lo buscamos en la Web  lo descargamos e instalamos. Su uso es también sin costo.

Docker y Docker Composer

Programas que sirven para gestionar los servicios. Está en la Web como un solo paquete, y tiene su versión para Windows 10. Siguiendo la sugerencia de Potencier, lo decargamos e instalamos. Si no tienes totalmente actualizado Windows 10 Pro, este es uno de los programas cuya instalación más tiempo te llevará ya que requiere actualizar varias librerias de Windows, ya sea a través de Windows Update o directamente ejecutadas por el programa de instalación de Docker.

Si eres como yo un desarrollador que trabaja, en la mayoría de sus proyectos en solitario y no vas a usar la base de datos PostgreSQL ni tampoco piensas desplegar tu proyecto en SymfonyCloud, como lo sugiere Potencier. Puedes saltearte este punto.

Symfony CLI

Proporciona un servidor Web local, tiene integración completa con Docker, todo lo cual, según afirma Potencier, aumentará nuestra productividad. Puedes descargalo del sitio oficial de Symfony. En el Paso 3 del libro, más precisamente en el punto “3.5 Preparando para producción”, Potencier sugiere como una buena práctica desplegar los proyectos, incluso en la fase de construcción, en algún servidor remoto. Él sugiere contratar como servidor remoto para desplegar nuestro proyecto a SymfonyCloud, que te costará 10 dólares al mes, y si bien cualquier servidor que acepte PHP puede utilizarse, todo el libro se desarrolla suponiendo que estás trabajando con el servidor de SymfonyCloud, por lo que nos decidimos a contratarlo, por lo menos al comienzo. Una ventaja desde el incio, es que si bien se trata de un servidor remoto que permitirá desplegar tu proyecto, no es un sitio público, con lo cual solo tú puedes ver como va funcionando tu proyecto en la Web.

Instalar Autoridad de Certificación

Otro uso importante que le damos a Symfony CLI, ya desde el comienzo, es que nos permite instalar una Autoridad de Certificación (CA)  para usar localmente HTTPS y para habilitar el soporte TLS. Se debe ejecutar el siguiente comando:

symfony server:ca:install

También deberás instalar el programa Yarn que aunque no está mencionado en este primer capítulo, es requerido al chequear los programas instalados. Para poder instalr Yarn, primero necesitas instalar Node.js con todas las librerias adicionales. Para testear que tienes todas las libreria necesarias para comenzar a trabajar con el caso del libro, conviene correr desde la terminal de Windows que estemos usando (Potencier aconseja instalar para Windows, Hyper como ya dijimos antes) el siguiente comando desde la carpeta donde hallamos instalado Symfony (en mi caso he creado la carpeta C:\Symfony): symfony book:check-requirements Si todo sale bien y tienes instaladas todas las librerias que se necesitan para el ejemplo del libro, al correr el comando anterior, verás en la pantalla de tu PC algo como esto: C:\Symfony>symfony book:check-requirements
[OK] Git installed
[OK] PHP installed version 7.4.7 (C:\xampp\php\php.exe)
[OK] PHP extension “curl” installed – optional – needed only for chapter 17 (Panther)
[OK] PHP extension “xsl” installed – required
[OK] PHP extension “amqp” installed – required
[OK] PHP extension “openssl” installed – required
[OK] PHP extension “zip” installed – optional – needed only for chapter 17 (Panther)
[OK] PHP extension “json” installed – required
[OK] PHP extension “ctype” installed – required
[OK] PHP extension “redis” installed – optional – needed only for chapter 11
[OK] PHP extension “pdo_pgsql” installed – required
[OK] PHP extension “intl” installed – required
[OK] PHP extension “mbstring” installed – required
[OK] PHP extension “sodium” installed – required
[OK] PHP extension “gd” installed – optional – needed only for chapter 23 (Imagine)
[OK] PHP extension “session” installed – required
[OK] PHP extension “tokenizer” installed – required
[OK] PHP extension “xml” installed – required
[OK] Composer installed
[OK] Docker installed
[OK] Docker Compose installed
[OK] Yarn installed
[OK] Congrats! You are ready to start reading the book. 

Referencias:(1) “Symfony 5: La Vía Rápida”. Fabien Potencier. 2020. Se consigue en varios idiomas, incluyendo por supuesto el castellano, en formato PDF en el sitio oficial de Symfony por 30 euros. Está también en foma gratuita una versión del libro en el sitio oficial de Symfony pero en formato HTML. El link para adquirir la versión en español en PDF está aquí: https://leanpub.com/symfony5-la-via-rapida
(2) Symfony 5: La Vía Rápida” página 27