lunes, 23 de septiembre de 2013

¿Qué es Symfony?

Es difícil explicar qué es Symfony. Sería correcto decir que Symfony es un framework basado en lenguaje PHP, diseñado para optimizar el desarrollo de las aplicaciones web usando en el patrón Modelo Vista Controlador (MVC). Algo así pone en la Wikipedia en su entrada Symfony. Pero eso es quedarse terriblemente corto. Esa misma definición encaja por ejemplo con Codeigniter y en realidad son dos cosas totalmente distintas, aunque persigan el mismo fin.

En la página web oficial de Symfony lo describen como un framework PHP, una filosofía y una comunidad; todos trabajando juntos en armonía. Esa es una definición "de libro", pero tampoco explica bien que es Symfony.

En realidad Symfony es más bien un conjunto de herramientas y servicios heterogéneos que, trabajando juntos, permiten desarrollar páginas y aplicaciones web complejas de forma eficiente, reduciendo el tiempo de desarrollo y automatizando las tareas comunes. Entre las herramientas que proporciona Symfony se encuentra un framework PHP, un gestor de plantillas (Twig) y un gestor ORM (Doctrine) y mucho más. Además es sumamente sencillo incorporar herramientas y aplicaciones de terceros.

La diferencia principal entre Symfony y otros frameworks PHP como Codeigniter es que mientras Codeigniter es un framework PHP puro (y ya está), Symfony es mucho más. Symfony proporciona toda una nueva filosofía de trabajo, incorporando multitud de herramientas que ayudan al desarrollo web y dirigen el proyecto, pero también lo limitan. Una ver has adoptado Symfony no puedes hacer las cosas como quieras: tienes que adaptarte a su filosofía. También es cierto que la la curva de aprendizaje de Symfony es mucho más pronunciada que Codeigniter. Empezar de cero con Symfony no es fácil, por mucha experiencia que tengas en PHP y en otros frameworks.


Un poco de historia

Symfony es un proyecto de software libre creado en 2005 por Fabien Potencier, actual CEO de Sensio Labs. La versión 1.0 fue liberada en 2007 y actualmente va por la versión 2.3, estando en preparación la 2.4. Cada nueva versión de Symfony incorpora mejoras y nuevas herramientas. Por desgracia las nuevas versiones no siempre son retrocompatibles, siendo necesario realizar cambios en el código fuente de los proyectos para adaptarse, aunque el salto más grande se produjo entre la versión 1.4 y la 2.0 (Symfony 2).


Un vistazo rápido

El framework Symfony obliga desarrollar usando el patrón Modelo-Vista-Controlador (MVC). Dicho patrón divide el desarrollo del proyecto en tres partes: el Modelo que gestiona todo lo relacionado con los datos que maneja la aplicación, la Vista que gestiona todas las interacciones con el usuario y el Controlador que gestiona todo lo que ocurre en la aplicación. El controlador procesa las peticiones, recupera los datos usando el modelo y lanza las vistas que interaccionan con el usuario. En Symfony cada una de estas partes está regulada por un componente diferente:

  • Modelo: En Symfony la parte del modelo viene gestionada por Doctrine que es una una biblioteca de clases cuyo objetivo es dotar al proyecto de poderosas herramientas para facilitar la lectura/escritura de información desde/hacia una base de datos. Doctrine es compatible con la mayoría de gestores de bases de datos, como MySQL, PostgreSQL, Oracle, etc.

    Una de las características más importantes es que el código en Doctine es independiente del gestor de base de datos. En teoría se podría cambiar el gestor en cualquier momento sin tener que modificar una línea de código. Para ello en Doctrine las queries se escriben usando DQL (Doctrine Query Language) que es una especie de SQL orientado a objetos.

  • Vistas: La parte de las vistas en symfony se gestiona con el motor de plantillas Twig del que ya hablamos hace tiempo.

    Al igual que otros motores de plantillas, Twig ayuda a separar de forma sencilla la lógica de la aplicación (código PHP) de la presentación (HTML/CSS). Es una herramienta muy potente pero a la vez muy flexible que permite diseñar plantillas de presentación muy complejas sin usar instrucciones PHP, haciendo que el código HTML/CSS final sea mucho más legible. En Twig se pueden usar variables, filtros, funciones, estructuras de control (if, for, ...), macros, expresiones, comentarios y más.

  • Controlador: En el patrón MVC el controlador se encarga de recoger las peticiones HTML, procesarlas, recuperar los datos, generar nuevas peticiones y/o lanzar las vistas correspondientes. En Symfony la parte del controlador está gestionada por clases propias del framework. Se pueden definir múltiples controladores y dentro de cada controlador varias acciones.

  • Arquitectura: Toda aplicación Symfony se divide en paquetes (bundles). Cada bundle puede contener: controladores, entidades (modelo), plantillas (vistas), archivos de configuración y otros recursos (formularios, menús, traducciones, etc.). Todo ello se controla a través de de namespaces, una característica de PHP 5.3.

  • Configuración: Symfony es un producto altamente configurable que soporta además diversos métodos de configuración, de forma que en cada proyecto se puede escoger la que mejor se adapte a las necesidades, pudiendo incluso mezclarse. Symfony puede usar indistintamente configuración a través de archivos YAML, XML o PHP. También soporta Annotations para configurar por ejemplo las rutas de los controladores.

Referencias

No hay comentarios:

Publicar un comentario