Symfony2, cada día mejor y más sencillo

Jueves, 28 de abril de 2011

Hace unos días comentaba en un artículo que una de las cosas que menos me gustaban de Symfony2 es que actualmente no es un framework pulido. Algunas configuraciones son innecesariamente largas, el comportamiento por defecto de algunos métodos no parece coincidir con el caso más común,  en ocasiones hay que indicar información que la aplicación podría obtener fácilmente ella misma, etc.

Como era de esperar, todo esto está cambiando rápidamente. Symfony2 ya está terminado en cuanto a arquitectura interna y componentes que lo forman, por lo que ya ha empezado la fase de corrección de errores, retoques y aplicación de “usabilidad para programadores”.

El blog oficial de Symfony acaba de publicar un artículo explicando alguno de los cambios y simplificaciones que se han incluido últimamente. Por ejemplo antes se configuraba de esta forma los datos de conexión con tu base de datos:

doctrine:
    dbal:
        connections:
            default:
                dbname:   nombre-base-de-datos
                user:     root
                password: ~

Ahora se ha simplificado para el caso común, que es tener una única conexión con base de datos, por lo que puedes escribir:

doctrine:
    dbal:
        dbname:   nombre-base-de-datos
        user:     root
        password: ~

Otro ejemplo muy claro de la nueva dirección que está tomando Symfony2 son los mapeos de Doctrine, que antes había que indicarlos explícitamente para cada bundle que tuvieras:

doctrine:
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        mappings:
            PrimerBundle:  ~
            SegundoBundle: ~
            TercerBundle:  ~
            CuartoBundle:  ~

Ahora será Doctrine el que tenga que hacer ese trabajo, por lo que la configuración se reduce a:

doctrine:
    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

Los formularios también se está simplificando mucho. Antes por ejemplo tenías que indicar explícitamente el tipo de clase asociada al formulario:

class EjemploForm extends Form
{
    protected function configure()
    {
        $this->setDataClass('MiNamespace\MiBundle\Entity\Ejemplo');
        ...

A partir de ahora podrás olvidarte del método ->setDataClass() a menos que hagas cosas muy raras con los formularios.

Además de simplificar el código, la otra línea de trabajo actual es la mejora de los mensajes de error. Antes era realmente complicado depurar algunos errores porque Symfony2 no informaba de la línea o al menos el archivo concreto donde se producía el error. Ahora siempre sabrás la línea y archivo exacto en el que está el problema.

Fuente: Symfony2: Getting easier

1 comentario »

Cómo aprender Symfony2

Martes, 19 de abril de 2011

Desde la publicación del último artículo, mucha gente me ha preguntado cuáles son las mejores referencias para aprender Symfony2. Por eso este artículo muestra todas las aplicaciones y artículos que me han ayudado a resolver todas las dudas que me surgieron.

  • Repositorio symfony2bundles, se trata del código fuente del sitio Symfony2Bundles.org, que también está programado con Symfony2. Fue la aplicación que más utilicé al principio, ya que es tan completa que tiene de todo (desde cómo cargar fixtures hasta cómo funciona la inyección de dependencias).
  • Repositorio ServerGroveLiveChat, es el código fuente de una aplicación de chat desarrollada por ServerGrove, la empresa de hosting especializado en Symfony. Consiste en la típica aplicación para poder hablar con los responsables comerciales del sitio web y de esta forma resolver las dudas sobre sus productos. Esta aplicación es espectacular, ya que tiene de todo y su código está más actualizado que la anterior. Como almacenamiento utilizan MongoDB y ODM, pero todos los conceptos se pueden trasladar fácilmente a MySQL y ORM.

Además de estas dos aplicaciones completas (sobre todo la última) he encontrado varios artículos cortos que me ayudaron a solucionar problemas que no están explicados en la documentación oficial o que no están explicados del todo bien:

Y para el futuro, cuando los nuevos formularios de Symfony2 estén listos, un recurso imprescindible será el repositorio AcmePizzaBundle, un micro-aplicación de prueba que muestra cómo utilizar los formularios junto con Doctrine2.

En cualquier caso, a pesar de las aplicaciones públicas y los artículos, si utilizas Symfony2 ahora mismo te encontrarás con muchas dudas y problemas que sólo se resuelven mirando el código fuente del propio Symfony2.

Y recuerda que la razón de que la documentación oficial de Symfony2 por el momento no sea muy buena es que todavía no ha salido ni siquiera la beta de Symfony2. En cuanto se publique la versión final, tendrás a tu disposición libros enteros gratuitos y decenas de artículos para ayudarte a resolver tus problemas.

9 comentarios »

Mi experiencia programando con Symfony2

Viernes, 15 de abril de 2011

Hace unas horas he publicado ComoGastan.com, un sitio que vigila cómo se gasta el dinero de tus impuestos y que es mi primer proyecto completo desarrollado con Symfony2.

Así que en este artículo voy a opinar sobre lo que me gusta y lo que no de Symfony2. Si no tienes tiempo para leerlo todo, el resumen es que me encanta Symfony2.

Lo que me gusta:

  • Twig para las plantillas. Las plantillas creadas con Twig son concisas, bonitas y hasta los diseñadores más torpes pueden entenderlas. Si usas Django, verás que las plantillas Twig son casi idénticas. Después de usar Twig intensivamente, sólo puedo decir que siento asco cada vez que veo una plantilla PHP. De todas formas, tranquilo porque si los sistemas de plantillas no te convencen, puedes seguir creando tus plantillas con PHP.
  • Seguridad integrada y completa. En Symfony 1.x tenías que instalar plugins para añadir seguridad a tu sitio. Symfony2 ya lo tiene todo incluido: proteger la parte de administración con usuario + contraseña cuesta menos de 10 segundos. Asociar la seguridad del sitio a los usuarios de una base de datos cuesta bastante más ;)
  • Doctrine2. Cuando empecé con Doctrine2 no me gustó mucho, ya que cambia radicalmente todo lo que conocíamos. Después de utilizarlo en una aplicación real hay muchas cosas que me han acabado gustando. Si vienes del mundo Java, te encantará saber que en Symfony2 se trabaja con el Entity Manager y con el Unit of Work.
  • Formularios. Todavía están sin terminar, todavía no están integrados a la perfección con Doctrine2 y todavía tienen muchas carencias … pero lo que he utilizado hasta ahora me gusta. Mucho mejor que en Symfony 1.
  • Flexibilidad. Symfony 1 es un framework muy flexible, Symfony2 es totalmente flexible. No conozco nada que no se pueda cambiar en Symfony2.
  • Rendimiento. Symfony2 es rapidísimo y hay caches para todo.

Lo que no me gusta:

  • Sin fecha de lanzamiento. El proyecto tiene una gran actividad de desarrollo y lo siguen mejorando cada día, pero todavía no se sabe cuándo va a salir. Particularmente no me importa que se retrase a cambio de que sea mejor, pero creo que debería existir un roadmap en forma de listado de cosas pendientes que quedan por hacer hasta el lanzamiento de la versión 2.0.
  • Documentación. Acostumbrados a la maravillosa documentación de Symfony 1, la de Symfony2 parece escasa, mala y desactualizada. En cualquier caso, este punto sólo es importante ahora mismo, ya que en cuanto salga la versión final de Symfony2 volverán a deslumbrar con una documentación sin igual.
  • Admin generator. Symfony2 no tiene ni va a tener generador de la parte de administración, que es el punto fuerte de Symfony 1. Sinceramente este me parece el mayor error de Symfony2. La razón que dan es que como los formularios no estaban terminados, no se puede hacer el admin generator. Tienen razón, pero sospecho que Symfony 2.1 va a tener admin generator si o si.
  • Verbose. El lema de Symfony 1 era “convención en vez de configuración”. El lema de Symfony2 es “explícito en vez de mágico”. Esto hace que algunas cosas sean bastante largas de escribir, como por ejemplo los repugnantes namespaces. François Zaninotto lo explicó bien en su artículo anunciando el fin del autoloading en PHP.
  • Falta de detalles. Symfony2 no es un framework pulido. Le faltan esos pequeños detalles que hacen que te encante usarlo.

Resumiendo todo lo anterior, creo que Symfony2 será con mucha diferencia el mejor framework para PHP. El lanzamiento de la versión 2.0 sentará unas bases my sólidas para mejorar el framework durante los cinco años siguientes. Por eso creo que Symfony 2.1, 2.2 y siguientes tendrán muy pocas cosas que envidiar a Django y RubyOnRails.

Obviamente este artículo sólo muestra opiniones personales, así que me encantaría escuchar las vuestras, sobre todo si son contrarias.

23 comentarios »

Se publica Symfony 1.3.11 y 1.4.11

Jueves, 14 de abril de 2011

El proyecto Symfony ha publicado nuevas versiones de las ramas 1.3 y 1.4 apenas una semana después de publicar las anteriores y después de asegurar que la versión 1.3.10 sería la última que se publicaría de la rama 1.3.

El motivo es que Symfony 1.3.10 y 1.4.10 no incluyen un parche para Doctrine 1.2 que sí incluían las versiones anteriores y que también incluyen 1.3.11 y 1.4.11. Así que si tu proyecto tiene definidas varias conexiones con bases de datos diferentes, al actualizar a 1.3.10 o 1.4.10 habrá dejado de funcionar.

Como siempre, para actualizar tu versión de Symfony:

  • Si usas el sandbox, te lo tienes que bajar otra vez.
  • Si lo has instalado mediante el archivo comprimido de Symfony, te lo tienes que bajar otra vez desde www.symfony-project.org/installation/1_3www.symfony-project.org/installation/1_4 y debes descomprimirlo en el mismo directorio dentro de tu proyecto.
  • Si lo has instalado mediante PEAR, ejecuta el comando pear upgrade symfony/symfony-1.3.11pear upgrade symfony/symfony-1.4.11
  • Si lo instalas mediante Subversion, ejecuta el comando svn checkout http://svn.symfony-project.com/tags/RELEASE_1_3_11/svn checkout http://svn.symfony-project.com/tags/RELEASE_1_4_11/

Independientemente de cómo lo actualices, no olvides borrar la caché de cada proyecto después de la actualización mediante los siguientes comandos:

Si utilizas Doctrine:

$ php symfony doctrine:build --all-classes
$ php symfony cache:clear

Si utilizas Propel:

$ php symfony propel:build --all-classes
$ php symfony cache:clear

Fuente: symfony 1.3.11 and 1.4.11

1 comentario »

Se publican las actualizaciones de seguridad 1.3.10 y 1.4.10

Martes, 22 de marzo de 2011

El proyecto Symfony acaba de publicar una actualización de seguridad para las ramas 1.3 y 1.4. Esta actualización es debida a una grave vulnerabilidad descubierta en Doctrine 1.2.3 y 2.0.2 que permite los ataques de inyección de código SQL. Por tanto, se recomienda actualizar inmediatamente todas las aplicaciones que utilicen symfony 1.3 y 1.4.

Además, esta actualización será la última de la rama 1.3.x, por lo que es una buena idea actualizar tus proyectos a 1.4.x, que será mantenida hasta noviembre del año 2012.

Como siempre, para actualizar tu versión de Symfony:

  • Si usas el sandbox, te lo tienes que bajar otra vez.
  • Si lo has instalado mediante el archivo comprimido de Symfony, te lo tienes que bajar otra vez desde www.symfony-project.org/installation/1_3www.symfony-project.org/installation/1_4 y debes descomprimirlo en el mismo directorio dentro de tu proyecto.
  • Si lo has instalado mediante PEAR, ejecuta el comando pear upgrade symfony/symfony-1.3.10 pear upgrade symfony/symfony-1.4.10
  • Si lo instalas mediante Subversion, ejecuta el comando svn checkout http://svn.symfony-project.com/tags/RELEASE_1_3_10/svn checkout http://svn.symfony-project.com/tags/RELEASE_1_4_10/

Independientemente de cómo lo actualices, no olvides borrar la caché de cada proyecto después de la actualización mediante los siguientes comandos:

Si utilizas Doctrine:

$ php symfony doctrine:build --all-classes
$ php symfony cache:clear

Si utilizas Propel:

$ php symfony propel:build --all-classes
$ php symfony cache:clear

Fuente: symfony 1.3.10 and 1.4.10: security releases

3 comentarios »