Mi opinión oficial sobre Symfony2

La fecha tan esperada desde hace ya mucho tiempo ha llegada finalmente. Ya estuvimos esperando desde el año pasado varias veces el famoso lanzamiento de Symfony2 y hoy, ha llegado el día oficial, por lo que no me gustaría dejar pasar este día tan esperado sin dejar una impresión de meses de pruebas con varios preview releases, beta versions y release candidates.

Mi primera impresión sobre esta nueva versión después de trabajar con Symfony desde la versión 1.0 es, SE ESCRIBE MUCHO!!!. La magia que hasta ahora nos regalaba Symfony 1 con sus archivos .yml eran realmente muy útiles pero lastimosamente tuvieron que sacrificar esto para lograr mayor performance.

Me gustaría dividir por categorías las cosa que tenemos que tener en cuenta para ir adentrándonos con Symfony 2.

Conceptos básicos

Cuando hablábamos de la instalación de Symfony siempre teníamos que entender primeramente los conceptos de proyecto, aplicaciones y módulos. Una proyecto por lo general tenía dos aplicaciones, el frontend y el backend (en los proyectos estándares) y una aplicación podría tener varios módulos que no eran más que simples carpetas que organizaban nuestras páginas con un sentido en común.

Hoy en día con la nueva versión hablamos que un proyecto, aunque puede tener más de una aplicación, debería tener una sola y ésta se organiza internamente con un nuevo concepto muy interesante llamado Bundle.

Los Bundles son una mezcla entre los módulos y los plugins. Es aquí donde se encuentra nuestra programación realmente y la idea del Bundle es que si necesito esa misma funcionalidad dentro de otro proyecto debería poder copiarlo completo al nuevo proyecto y debería ser lo suficientemente independiente como para funcionar. Este era el concepto de los Plugins que fueron muy útiles en la versión 1 de Symfony.

Dentro de los controladores se mantienen los conceptos de un controlador que contiene Actions y los templates del mismo.

Hoy en día el Bundle es el concepto que más hay que tratar de entender bien ya que en Symfony2 TODO esta formado por Bundles inclusive el framework mismo, nuestras aplicaciones y los plugins.

Modelo

En el modelo teníamos anteriormente el schema.yml que resultaba muy rápido para crear nuestra estructura de base de datos por la potencia y simplicidad de los archivos YAML. Symfony2 incluye la versión 2 de Doctrine. Doctrine anteriormente ya estaba inspirado en el framework Hibernate de JAVA, tenía muchas idea similares y hoy en día el concepto de “tomemos lo bueno de los demás frameworks”, cultura que siempre Symfony mantuvo, se ha hecho realidad ya que Doctrine 2 es extremadamente parecido a Hibernate, hasta inclusive con los Annotations de JAVA.

Aquí es donde me resentí un poco ya que para crear nuestras clases que mapean las tablas de nuestra base de datos se tiene que ir creando clase por clase y mapear con annotations del ORM. No digo que este mal, ni estoy en contra, es simplemente que quizá estaba mal acostumbrado a usar el schema.yml y bueno hoy en día es más tedioso pero conservo el buen ánimo.

Se introduce un nuevo concepto aquí que también ya existía con Hibernate que es el Entity Manager que será el encargado de acceder nuestro modelo. Anteriormente existían 3 archivos por cada tabla de la base de datos. Por ejemplo, si tuviéramos la tabla persona tendríamos un BasePersona, Persona y PersonaTable. Ahora tendremos una clase Persona que será la unión entre BasePersona y Persona; y nuestro PersonaTable continúa existiendo bajo el nombre PersonaRepository.

Vista

Aquí tenemos un muy buen agregado con la nueva versión ya que han incorporado el framework Twig como motor de plantillas. Me gusta mucho como se maneja Twig para las plantillas y con las extensiones propias que se pueden agregar y las que podemos desarrollar nosotros mismos creo que suplimos la falta de los helpers que desaparecen también.

Twig maneja muy bien la herencia entre plantillas, cosa que hasta ellos dicen que es una de las cosas más potentes de este motor de plantillas.

Los slots, partials y componentes siguen existiendo con nuevos nombres; ahora tenemos bloques, includes y renders pero por suerte la idea se mantiene porque eran realmente útiles.

Otra cosa importante es que no es obligatorio el uso de Twig, aunque yo sí lo pienso usar, para los que quieran manejarse con PHP como motor de plantilla lo podrán hacer sin problema.

Routing

La idea de los routings se mantienen totalmente igual, con la misma potencia que esto implica pero eso sí, tengo que aprender que ahora para denominar una página en lugar de ser: modulo/action se debe pensar en el Bundle y se escribe NombreBundle:Controlador:Plantilla. El nombre del Bundle es mejor acortarlo lo máximo posible porque con Symfony2 escribirás tantas veces el nombre que hasta soñaras con el mismo 😛

Seguridad. Autenticación y Autorización

En Symfony 1 teníamos el sfDoctrineGuardPlugin que considero era una maravilla, mientras que quedé un poco decepcionado cuando vía como se maneja con la nueva versión, ya que aunque ahora el framework ya incluye más funciones para el logueo todavía es muy manual. Como lo podrán ver en el libro oficial, muestran que la página de login se hace complemente a mano incluyendo el formulario con HTML. Espero que esto pueda ser mejorado y que quizá se logre un Bundle que reemplace al sfDoctrineGuardPlugin.

Formularios

Los formularios se mantienen con la misma idea pero, según mi forma de entender se debería siempre intentar tener un POPO por cada formulario, concepto que también JAVA lo tiene (POJO). Básicamente un POPO (Plain Old PHP Object) es una clase simple con propiedades y accessors (getters y setters). La idea es que un formulario pertenezca a un objeto. También considero que se escribe más con relación a la anterior forma.

Documentación

Siempre con el estilo propio de Symfony tenemos una amplia gama de documentación que ahora sí ya se encuentra actualizada. Contamos con el Quick Tour, muy aconsejable para empezar a dar un vistazo; el libro oficial, el cookbook con ciertas recetas interesantes y por supuesto el API.

Opinión Final

Estas son mis apreciaciones sobre esta nueva versión de Symfony. En resumen me impacto mucho tanto las ventajas como las desventajas, pero considero que ahora que se logró la estabilidad del proyecto, los grandes desarrolladores a quiénes debemos mucho esfuerzo, irán trabajando para facilitar más la cantidad de código que se necesita escribir y logrando quizá lo más importante que siempre se buscó: La buena performance de las aplicaciones, seguridad y potencia, puntos que creo se lograron ampliamente.

Gracias todos los desarrolladores y documentadores de Symfony por el esfuerzo enorme de tantos meses de trabajo y por lograr lanzar hoy la nueva versión.

Bienvenido Symfony2.

Modificación realizada el 13 de abril de 2012 a este artículo

Para quienes pueda interesarles estuve escribiendo conjuntamente con
@maycolalvarez una Guía de Symfony2 para Maestros del Web. Serán 13
capítulos y están siendo publicados uno por semana. Los mismos pueden
ser accedidos desde aquí 🙂

13 comentarios en “Mi opinión oficial sobre Symfony2”

  1. Hey, buen resúmen 😀

    A mi me han gustado todos los cambios. Se escribe un poco más, pero creo que vale la pena.

    Por cierto, creo que el homónimo al sfDoctrineGuardPlugin de sf1 en sf2 sería el FOSUserBundle. Tuve problemas para configurarlo allá por la PR6, y desde entonces no lo he vuelto a probar, pero se ve que tiene todo lo que uno necesita 😛

    https://github.com/FriendsOfSymfony/

    Supongo que para muchos el fin de semana será de experimentos con el nuevo sf2, a ver que surge nuevo para la próxima semana.

  2. Buenas mi consulta es la siguiente estuve leyendo el site oficial de symfony sobre la versión 1.4 y veo que se basa mucho todavía en la versión mas 1.2 la verdad que ya conozco otros framework como cake php y codeigniter pero este me inicio y me gustaría comenzar probando con esta versión este es el enlace al que me refiere http://www.symfony.es/documentacion/instalacion/instalacion-de-symfony-1-4/ también me fije en
    el conocido libro web.es pero no esta actualizado.. en fin si alguien conoce alguna buena documentación a parte claro de la oficial específicamente si hay mas documentación para el entorno netbeans7 vs symfony

    Sigan adelante con los aportes que están buenos..

    Saludos y espero su atención

    1. Hola Dani.

      Si quieres empezar con la versión 1.4 lo que más te recomendaría es leerte la documentación oficial. Lastimosamente el libro “http://www.symfony-project.org/doc/1_4/” sigue en ingles pero el “Practical symfony” si lo tienes en español. De todas maneras los libros que están en librosweb.es siguen siendo una gran utilidad aunque estén escritos para la versión 1.2 ya que gran parte queda igual. Incluyendo el libro sobre formularios que también está ahí y es de mucha ayuda.

      Con netbeans no encontré mucho, pero tampoco hay tanto soporte salvo poder ejecutar los tasks desde el netbeans que siempre los prefiero hacer por consola. Más bien la ayuda que te da es poder usar el autocompletado de métodos y esas cosas.

      Gracias por tu comentario.

    1. Javier gracias por tu lectura.

      Hasta último que leí, como lo decía Javier Eguiluz en su blog, Symfony2 no lo tendría en esta versión, pero yo creo que para la siguiente versión ya se tendrá algo, lo más probable como un Bundle separado ya que todo está orientado a Bundles ahora.

  3. Está muy bueno, a esta altura que ya deben haber cacharreado al SF2 quisiera que me tiraran un cabo, es que empezé con SF2 un proyecto pero mi duda es teórica, por ejemplo tengo una clase empleado y una sexo, mi pregunta sería:

    – ¿Creen ustedes que deba tener sexo y empleado en bundles separados o solo en uno?

    Lo pregunto porque puede ser que un día me haga solo falta lo relacionado a sex para otro proyecto y ya tenga perfectamente configuro un bundle.

    Ustedes que creen amigos? Saludos

    1. Hola Victor.

      Hay que recordar que los bundles no son lo mismo que los módulos de la versión 1.x. Realmente un Bundle debería, a mi criterio, ser un conjunto de funcionalidades que tengan sentido estar juntas. De todas maneras no hay nada que te impida tratarlo así. Lo que yo haría, para no llenarme de bundles, es crear uno con funcionalidades que siempre tienen mis proyectos por ejemplo el tema del sexo y con alguna configuración propia habilito una u otra funcionalidad dependiendo de la necesidad de mi proyecto.

      De todas maneras yo no trataría el sexo como una tabla aparte sino dentro de los parámetros de mi sistema, esto ya que quizás no sea tan necesario tener un ABM de sexo ya que no hay muchos registros posibles. Te recomendaría dar una mirada a este artículo puede que te de una idea.

      A las órdenes y disculpa la demora.

  4. Creo que en lo personal se me hizo mas fresco el arranque con symfony2 que con la 1.4, llevo pocas semanas leyendo al respecto y he entendido todo y me parece que todo esta mas claro y ordenado. Con la 1.4 pasaba horas y horas para entender como funcionaba o mejor dicho, cual era la función para cada elemento dentro del framework. Creo que prefiero escribir un poco más de código a cambio de disminuir la curva de aprendizaje y de como se menciona en este post, lograr un mayor performance de las aplicaciones, seguridad y potencia, lo cual fué logrado a plenitud!

      1. mar_sid.

        La documentación oficial en la que me base. Siempre es la más completa. Aprovecho para comentarte también que estuve escribiendo una Guía de Symfony2 para Maestros del Web conjuntamente con @maycolalvarez. Se va publicando un capítulo por semana. Puedes acceder al RSS para ver lo capítulos publicados y cuando se van publicando 🙂

        Otro recurso muy útil es el libro de Javier Eguiluz “Desarrollo web ágil con Symfony2”. Ha hecho un muy buen trabajo y está completamente es español

        Espero haberte ayudado

Comenta este artículo