Primero que nada Symfony, no es un framework MVC, Symfony es un framework Full stack. En éste artículo no voy a debatir porque Laravel no es el mejor framework de php. Sin embargo, considero que Laravel tiene un lugar muy especial en el mundo de PHP.

Sin más preámbulo, a continuación mis puntos de porque Symfony es el mejor framework de PHP

1. Symfony es un framework full stack increíblemente rápido.

Una de las principales razones por las cuales prefiero frameworks full stack en lugar de micro frameworks es porque los frameworks full stack como Symfony reducen el tiempo de crear una aplicación considerablemente.

Por ejemplo la versión completa de Symfony viene con componentes que se encargan de administrar las rutas de tu aplicación, ORMs, Migraciones de bases de datos, validación de formularios, administración de sesiones, autorización y autenticación, serializadores, procesadores de correo electrónico, barra de depuración e interfaz gráfica para analizar el desempeño de la aplicación.

A pesar de que Symfony vine bastante completo, e incluso "pesado" bajo algunos estándares. Symfony, sin ninguna capa de caché, distribuidores de carga, o técnicas avanzadas, es capaz de manejar por sí solo hasta 700 peticiones por segundo con un tiempo de respuesta promedio de 30 milisegundos. Si te pones a analizar ese número te daras cuenta que estás hablando que Symfony, por si solo, es capaz de servir 60 millones de peticiones diarias.

2. Desarrollar una aplicación compleja en Symfony es muy, muy, muy fácil.

He de admitir que la primera vez que tuve que mantener un proyecto escrito en Symfony, me encontraba bastante frustrado por tener que utilizar un framework que en mi mente iba a estar lleno de convenciones como Zend, y tenía que aprender nuevas nomenclatura y series de convenciones.

Sin embargo, mi sorpresa fue que Symfony rápidamente se convirtió en mi framework de PHP favorito, y vaya que he utilizado un sin fin de frameworks, y no digo que alguna cosa es mi favorita ligeramente.

Symfony viene con convenciones y nomenclaturas, sin embargo es lo suficientemente flexible que si no te quieres apegar a sus convenciones, simplemente puedes ignorarlas y desarrollar tu aplicación como mejor te plazca, sin que Symfony se interponga en tu camino.

No importa si quieres programar una aplicación monolítica, una aplicación que utilize SOA o micro-servicios. Con Symfony puedes hacer las tres cosas muy fácilmente, sin necesidad de hacks.

Necesitas soportar autenticación por nombre de usuario y contraseña, autenticación por OAuth, SSO, o todas al mismo tiempo? Symfony te permite hacer absolutamente eso dado que separa la autenticación y la autorización de una manera bastante eficiente y elegante.

Necesitas utilizar diferentes motores de bases de datos? o quizá tienes un cluster de Redis? No hay problema. Symfony te permite utilizar cualquier ORM que desees, y al mismo tiempo expone una API por si deseas desarrollar tu propio ORM.

3. Symfony es altamente extendible.

Muchas veces necesitas alterar el funcionamiento de un framework para que se acople a tu lógica de negocio. Sin embargo, alterar el funcionamiento del framework puede acarrear problemas cuando desees actualizar la versión del framework en sí.

Una de las ventajas de Symfony, es que Symfony expone una API a la cual puedes registrar eventos y servicios, que en el momento en que un "evento" suceda dentro de tu aplicación, tu código propietario puede "reaccionar" a ese evento.

Por ejemplo, si necesitas alterar el contenido de la respuesta de todos los controladores, sin necesidad de copiar/pegar el mismo código en todos los métodos, o extender la clase base de los controladores, en Symfony simplemente tienes que registrar un evento en un archivo de configuración, crear tu clase en PHP, y modificar lo que tengas que modificar. Así de sencillo.

4. Tienes el control de tu aplicación, en todo momento.

Una de mis principales frustraciones con Frameworks en general, es que a veces siento que estás programando con una caja negra.

Que siempre y cuando sigas la documentación al pie de la letra, y no te desvíes de sus estándares y prácticas bendecidas, todo debe funcionar a la perfección. Sin embargo, el segundo que te salgas un poquito de la ruta sugerida por el Framework simple y sencillamente empiezas a entrar a un terreno completamente desconocido. En Symfony simple y sencillamente eso no sucede. Primero que nada porque la documentación, es increíblemente extensa y tienen un ejemplo para una un número inmesurable de escenarios, y si te queda alguna duda, te muestran el archivo completo de configuración, con todas las opciones disponibles, y que es lo que hace cada opción.

En ningún momento sientes que perdiste el control de tu aplicación, especialmente porque la instalación estándar de Symfony viene con una barra de depuración que te muestra de manera muy granular, exactamente que es lo que está haciendo tu aplicación en TODO momento. Ésto es sumamente poderoso.

Demasiado bueno para ser verdad???

Pues si, es verdad aunque la tiene algunas desventajas. Primero que nada necesitas al menos un VPS o alguna instancia en la nube, ya sea a través de Google, Amazon, Linode o Digital Ocean para poder publicar tus aplicaciones en la web ya que necesitas tener la habilidad de poder descargar e instalar cosas en tu servidor para que symfony funcione apropiadamente. No obstante, el precio de los VPS y de los servidores en la nube son tan bajos, que los puedes conseguir hasta en $5 USD por mes.

No es la panacea universal, la gran ventaja de Symfony es tambien su peor enemigo, a veces tener tanta flexibilidad son las causas de mal diseño de aplicaciones, pero el que es mal programador va a ser mal programador con cualquier framework.

Tambien los procesos utilizan mucha memoria, en promedio cada proceso ocupa 5 MB por lo que en un servidor barato solamente podrías tener alrededor de 20 o 30 usuarios concurrentes.

Para resumir, Symfony es una gran herramienta para tus proyectos en PHP sin importar el alcance de los mismos, pero su flexibilidad es un arma de dos filos. No recomendaría Symfony para alguien que está aprendiendo PHP en lo absoluto, Symfony desde mi punto de vista es un framework para usuarios con previa experiencia en diseño de programas orientados a servicios y un conocimiento experto en el modelo MVC.

Si eres usuatio de Symfony, dejame un comentario contandome tu experiencia! Que te gusta, que no te gusta y que te gustaría aprender.