Creación del proyecto "ShopLite"
🛒 Creación del proyecto Symfony 5.4 "ShopLite" + Solución de problemas con PHP 8.4
En esta entrada voy a documentar cómo creé el proyecto ShopLite, una aplicación Symfony 5.4 estilo e-commerce, y también un problema inesperado que surgió con PHP 8.4, además de cómo lo resolví cambiando a PHP 8.2.
📦 Instalación del proyecto Symfony: ShopLite
Desde la terminal, lancé la creación del proyecto usando el esqueleto oficial de Symfony para aplicaciones web:
composer create-project symfony/website-skeleton ShopLite "5.4.*"
Esto creó una nueva carpeta ShopLite
con todos los archivos base, incluyendo:
-
Archivos de configuración (
.env
,composer.json
, etc.) -
Estructura del proyecto Symfony (carpetas
config/
,src/
,templates/
, etc.)
🔧 Dependencias y componentes
Composer instaló automáticamente:
-
Symfony Flex (gestor de recetas)
-
134 paquetes adicionales que incluyen bundles y componentes clave:
-
framework-bundle
,routing
,security-bundle
,twig-bundle
,messenger
,validator
,mailer
,doctrine
,maker-bundle
, entre muchos otros.
-
También se desempaquetaron componentes agrupados como:
-
webapp-pack
-
orm-pack
-
debug-pack
-
profiler-pack
-
twig-pack
Symfony luego eliminó automáticamente estos packs, ya que sus dependencias fueron desempaquetadas individualmente para mayor control. Esto es completamente normal en Symfony Flex y deja el proyecto más limpio y optimizado.
🔔 Instrucciones post-instalación
Al finalizar, Symfony mostró varias recomendaciones específicas:
Base de Datos (Doctrine)
-
Configurar
DATABASE_URL
en el archivo.env
-
Definir el
driver
(MySQL, PostgreSQL, etc.) y laversión
del servidor enconfig/packages/doctrine.yaml
Mensajería (Messenger)
-
El componente
Messenger
ya está disponible. -
Podés habilitar colas asíncronas descomentando las variables en
.env
ymessenger.yaml
.
Envío de correos (Mailer)
-
Symfony viene listo para enviar correos.
-
Se pueden agregar bridges para servicios como Mailgun, SendGrid, etc.
-
Se puede integrar con Messenger para enviar mails en segundo plano.
Testing (PHPUnit)
-
PHPUnit ya está instalado (
phpunit-bridge
) -
Se recomienda comenzar a escribir tests en la carpeta
tests/
y usarphp bin/phpunit
para ejecutarlos.
Docker
Durante la instalación, Symfony preguntó si deseaba incluir configuración Docker básica (como compose.yaml
), y acepté. Esto prepara el proyecto para levantar servicios como base de datos en contenedores si se desea trabajar en un entorno Dockerizado.
⚠️ Problema con PHP 8.4 y solución
Durante la preparación del entorno me encontré con un problema inesperado: Symfony no reconocía correctamente la extensión xml
de PHP, lo cual es fundamental para que Symfony funcione bien (por ejemplo, para manejar servicios, YAML, validaciones, etc.).
Al revisar con:
php -m | grep xml
Sólo aparecía libxml
, pero no xml
, xmlreader
ni xmlwriter
, lo cual indicaba que el módulo no estaba cargado.
🕵️ Diagnóstico
A pesar de tener instalado php8.2-xml
, los módulos no se activaban porque PHP estaba apuntando a la versión 8.4 por defecto, y allí no estaba instalado ni habilitado el paquete php8.4-xml
.
Además, al intentar habilitar el módulo manualmente con:
sudo phpenmod xml
Se mostraba este error:
WARNING: Module xml ini file doesn't exist under /etc/php/8.4/mods-available
Esto confirmó que el módulo XML no estaba presente para PHP 8.4.
✅ Solución: cambiar a PHP 8.2
Dado que Symfony 5.4 tiene mejor compatibilidad con PHP 8.2 (y para evitar conflictos con extensiones no disponibles aún en 8.4), decidí cambiar la versión activa de PHP utilizando update-alternatives
:
sudo update-alternatives --config php
Allí seleccioné la opción correspondiente a php8.2
.
Después de eso, verifiqué que los módulos xml
, xmlreader
y xmlwriter
estaban correctamente cargados:
php -m | grep xml
Resultado esperado:
libxml
xml
xmlreader
xmlwriter
Con eso, Symfony ya pudo trabajar sin problemas.
🧪 Próximos pasos
Con el proyecto ya creado y el entorno estable:
-
Voy a iniciar el repositorio Git del proyecto:
cd ~/server/php/symfony/ShopLite
git init
Y empezaré a planificar las entidades, rutas, controladores y vistas que compondrán las funcionalidades básicas del e-commerce.
📝 Conclusión
Este proceso demuestra lo importante que es verificar la versión activa de PHP y que tenga todas las extensiones necesarias para Symfony. A veces, los paquetes están instalados pero en una versión diferente de la que el sistema usa por defecto, lo que puede generar errores difíciles de detectar a simple vista.
La decisión de volver a PHP 8.2 fue clave para garantizar la estabilidad del entorno durante el desarrollo inicial de ShopLite.
Comentarios
Publicar un comentario