De Symfony 1 a 2: cuando actualizar fue reescribir

última modificación:

Symfony 1 (2005) trajo estructura a un ecosistema PHP donde cada proyecto inventaba su propia arquitectura. El patrón MVC, un ORM integrado (al principio Propel, luego Doctrine), un sistema de plantillas, formularios, internacionalización y un generador de administración automático. Todo en un mismo paquete.

El precio era la verbosidad. Symfony 1 apostó por la configuración: archivos YAML por todas partes, una convención de directorios rígida, y un autoloader propio que mapeaba nombres de clase a rutas de archivo según sus propias reglas. El código funcionaba, pero la estructura era difícil de seguir desde fuera y casi imposible de testear de forma unitaria.

PHP 5.3 llegó en 2009 con namespaces y closures. Fabien Potencier, creador de Symfony, lo aprovechó para reescribir el framework desde cero. El resultado fue Symfony 2 en 2011: arquitectura de componentes desacoplados, inyección de dependencias como principio central, y PHP 5.3 como requisito mínimo.

La unidad de organización pasó de ser la aplicación monolítica al bundle: un paquete autocontenido con su propio código, configuración, rutas y plantillas. Una aplicación Symfony 2 es un conjunto de bundles.

El contenedor de inyección de dependencias sustituyó la creación directa de objetos. En lugar de new Mailer($config) en el controlador, el contenedor construye y proporciona los servicios que cada clase necesita. El código se vuelve testeable.

Twig reemplazó a las plantillas PHP de Symfony 1. Doctrine 2 (con una arquitectura completamente distinta a Doctrine 1) sustituyó al ORM anterior.

Pero todo esto trajo un gran problema: no había una guía de migración desde Symfony 1. Un proyecto en Symfony 1 no se podía migrar a Symfony 2. No era un descuido: era una decisión deliberada. Actualizar significaba reescribir la aplicación entera. Las clases tenían namespaces distintos, el ORM era diferente, los formularios funcionaban de otra manera, las plantillas eran incompatibles. Symfony 1 y Symfony 2 son dos frameworks que comparten nombre.

Parte de la comunidad lo vivió como una traición. Otro sector lo entendió como lo que era: PHP había madurado y el framework tenía que madurar con él.

La decisión de construir Symfony 2 como componentes desacoplados tiene consecuencias más allá de Symfony. Ahora puedes usar solo las piezas que necesitas: Silex, un microframework de los creadores de Symfony, es exactamente eso. La ruptura valió la pena.