Desarrollo web ágil con Symfony 2.3

Desde hace unas horas ya está disponible la nueva versión del libro para Symfony 2.3. Si eres uno de los compradores del libro de Symfony2, accede a la zona privada donde encontrarás una nueva versión para leer y descargar:

Zona privada para compradores del libro de Symfony2

También puedes ver los commits de la nueva rama 2.3 del repositorio de código de la aplicación de ejemplo Cupon que utiliza el libro para explicar el funcionamiento de Symfony2.

Los cambios más importantes han sido la sustitución de la ACL por un security voter (en previsión de los próximos cambios de Symfony2), la eliminación del bloque dedicado a Sonata (debido a su pésima documentación y lo difícil que es hacerlo funcionar) y la nueva forma de gestionar los formularios de Symfony (se ha convertido en una tradición que cada nueva versión de Symfony2 cambie totalmente sus formularios).

En las próximas semanas también se incluirá la explicación sobre las nuevas páginas estáticas (que son páginas asociadas con rutas y que no usan controladores) y los grupos de validación de los formularios.

Todas las versiones del libro se publican diariamente, por lo que siempre que accedas al sitio estarás leyendo la versión más actualizada posible y siempre estarás descargando la versión más reciente.

Lista de cambios del libro de Symfony 2.3

A continuación se muestra el listado completo de cambios de la nueva versión del libro:

  • Sección 20.4.2 Actualizado el código de las plantillas Twig para utilizar el nuevo helper render_esi() en vez de la anterior etiqueta {% render %}:

    // antes
    {% render 'UsuarioBundle:Default:cajaLogin' with { ... }, 
       { 'standalone': true }
    %}
     
    // ahora
    {{ render_esi(controller('UsuarioBundle:Default:cajaLogin', { ... })) }}
  • Sección 19.2 Añadido un pequeño truco para mejorar el rendimiento de Composer gracias a la opción --optimize

  • Capítulo 17 Eliminada la sección sobre el admin generator de Sonata, porque su documentación es muy mala y escasa.

  • Sección 15.2.1 Añadido un comentario sobre el posible uso de lifecycle callbacks de Doctrine2 para gestionar las fotos de las ofertas.

  • Sección 15.1.6 Actualizado el código de los ejemplos para utilizar el evento FormEvents::PRE_SUBMIT en vez del evento obsoleto FormEvents::POST_BIND.

  • Sección 13.4 Eliminada la sección sobre las ACL por ser demasiado compleja. Esta sección se ha reemplazado por la nueva sección sobre cómo crear un security voter propio, que es la forma recomendada y sencilla de implementar una funcionalidad similar a la de las anteriores listas ACL.

  • Sección 11.3.4 Actualizada la forma en la que se obtiene el valor de la cookie de sesión en los tests.

  • Sección 11.3.1 Actualizado el código del ejemplo que mide el tiempo de generación de las páginas. En Symfony 2.3 el método se llama $profiler->getCollector('time')->getDuration() y en las versiones anteriores era ->getTotalTime()

  • Sección 11.3.1 Añadido un aviso de que el profiler ya no está activado por defecto en los tests funcionales de Symfony 2.3 y hay que activarlo con el método $client->enableProfiler();.

  • Sección 8.7.4.2 Actualizado el código del ejemplo de validador propio para utilizar ExecutionContextInterface en vez de ExecutionContext y addViolationAt en vez de addViolationAtSubPath.

  • Sección 8.7.4.1 Corregidos algunos ejemplos que utilizaban el antiguo validador MinLength (ahora se utiliza Length(min = XX)).

  • Sección 8.7.4.1 Añadidos todos los nuevos validadores de Symfony 2.3, como los validadores de comparación (EqualTo, IdenticalTo, etc.) y los de los códigos numéricos (Iban, Issn, etc.)

  • Sección 8.7.3 Mejorada la explicación de los parámetros del método UsernamePasswordToken(). El tercer parámetro es el providerKey, pero en la práctica se entiende mejor si se utiliza el nombre del firewall asociado al proveedor de usuarios.

  • Actualizado el código para crear mensajes flash en todos los capítulos:

    // antes
    $this->get('session')->setFlash('info',
        '¡Enhorabuena! Te has registrado correctamente en Cupon'
    );
     
    // ahora
    $this->get('session')->getFlashBag()->add('info',
        '¡Enhorabuena! Te has registrado correctamente en Cupon'
    );
  • Actualizado el código de los formularios de todos los capítulos para utilizar el nuevo método handleRequest():

    // antes
    if ($peticion->getMethod() == 'POST') {
        if ($formulario->isValid()) {
            // ...
        }
    }
     
    // ahora
    $formulario->handleRequest($peticion);
    if ($formulario->isValid()) {
        // ...
    }
  • Actualizado el código Twig de todos los capítulos para utilizar la función render() en vez de la etiqueta {% render %}. La etiqueta sigue funcionando, pero la recomendación oficial es utilizar la función. Ejemplo:

    // antes
    {% render 'CiudadBundle:Default:listaCiudades' %}
     
    // ahora
    {{ render(controller('CiudadBundle:Default:listaCiudades')) }}
  • Sección 7.2.3 Añadido el aviso de que los archivos YAML ya no pueden contener código PHP porque a partir de Symfony 2.3 no es posible ejecutar ese código PHP de ninguna manera.

  • Sección 4.2 Añadido un aviso sobre el cambio del nombre de la variable de enrutamiento pattern, que a partir de Symfony 2.3 se llama path. Cambiado este valor en todos los archivos de enrutamiento de todos los capítulos.

  • Sección 3.1.6 Simplificadas las instrucciones de instalación de la aplicación Cupon ahora que ya no se utiliza una ACL.

  • Sección 3.2 Añadida la dirección local en formato IPv6 (::1) al archivo de hosts, ya que puede mejorar significativamente el tiempo de respuesta en local en algunas versiones de Mac OS X.

  • Sección 15.1.4 Añadida una nueva sección para explicar mejor cómo subir fotos con el formulario creando una propiedad virtual en la entidad y en el formulario. Aclarado el uso de las propiedades ruta_foto y foto en la entidad Oferta.

  • Sección 3.1.2 Añadida la explicación del nuevo instalador interactivo de Symfony 2.3, que pregunta el valor de varias opciones de configuración importantes.

  • Sección 3.1.2 Mejorada la explicación de cómo se instala Symfony2 con Composer. Ahora se utiliza una versión estable por defecto.

Comentarios

  1. Amazing! Gran trabajo como siempre.

    Ahora a leer las novedades. Me interesa mucho, como comentaba en el otro hilo el tema de security voter para no usar acls.

    Gonzalo González Domínguez el 28 de agosto de 2013, 10:52:29

  2. Hola Javier, tengo un problema para acceder a la zona privada y descargar las nuevas versiones.

    Te envié un email con mi cuenta de sensioLabs y la cuenta paypal de mi hermano, que fue con la que compre el libro. Espero que puedas solucionar el problema, un saludo y muy buen libro.

    ismael bermudez fernandez el 28 de agosto de 2013, 13:10:06

  3. Estaba esperándolo como agua de mayo para empezar un proyecto nuevo y genial! Gran trabajo! Muchas gracias!

    Cayetano Sanchez el 28 de agosto de 2013, 22:28:40

  4. Yo iba a hacer un proyecto en symfony y al final el jefe ha hablado con otros programadores y dice que Codeigniter porque tiene una curva de aprendizaje menor y es más fácil contratar a gente en el futuro ¬.¬, es un proyecto grande y ha pasado de mi recomendación... esto pasa por que la gente en muy lista, total voy a hacer el mismo proyecto en mis ratos en symfony y ver que es más rápido. Espero que dejen de cambiar tanto con las versiones porque esto le resta puntos...

    Alberto Vioque Muñoz el 28 de agosto de 2013, 23:01:51

  5. TRemendo!!!.. Ya que me lo estaba esperando... Al Fin el LIBRAZOO de Javier!!! Genial Simplemente Genial...!!! Un Abrazo Hermano.. Que De seguro te ha costado un Tanto ... Ahora unas merecidas Descanso.. para luego sacarlas corrrecciones hehehe :P pero VALE!!!! ...Lo mejor de lo mejor!!

    Carlos Salazar el 29 de agosto de 2013, 3:08:04

  6. @Alberto Ojo que Codeigniter está en proceso de fork y abandono, ya que la gente de Ellislab no tienen tiempo/medios para mantenerlo: http://ellislab.com/blog/entry/ellislab-seeking-new-owner-for-codeigniter

    Más rápido siempre va a ser codeigniter porque te deja ser 'sucio' y eso para sacar código rápido es imbatible (y una de las razones del boom de php :P), luego eso si mantenerlo es 'inferno inside'. Ya el tiempo que modelas en symfony tienes media app hecha en ci. Los problemas vienen luego.

    Yo no veo tanto que symfony agilice el desarrollo como si que te prepara la app para ser relativamente mantenible de forma sencilla. Por decirlo así te obliga a hacer un esfuerzo inicial 80% por adelantado para que luego cualquier detalle tenga un esfuerzo del 20%. Emho, y lo he usado mucho desde hace años, codeigniter es justo lo contrario, el 'problema'viene luego si la app crece, aparece la necesidad de modularizarla, etc.

    Ahora bien, en velocidad de sacar una app rápido y consumo de recursos para mi codeigniter es imbatible. Y he hecho cosas con cakephp, Yii, Kohanaphp, Zend Framework y symfony 1.x y 2.x.

    Gonzalo González Domínguez el 29 de agosto de 2013, 11:04:06

  7. @Gonzalo, lo sé, he puesto sobre la mesa los problemas que he leído sobre codeigniter, así como su posible "muerte", también razones como que el negocio es via web y hay que invertir en ello pero siguiendo las ultimas tecnologías ya que este mundo va muy rápido (no me da tiempo en aprender tantas cosas que hay actualmente), pero le da igual, le han dicho que con codeigniter es más fácil aprender (que conste que el no programa ni lo va a hacer) (y eso que le he dicho que de symfony ya empecé a mirarmelo ya 4 meses y que para hacer lo que queremos ya se hacerlo, vamos consultas a la base de datos, y varios Bundles), que es más rápido programar, que es más barato contratar luego a programadores ¬_¬, con esas cosas ha decidido usar codeigniter... vamos por lo que le han dicho los demás, da igual que digas que esto en el futuro es mejor, coge y dice que en el futuro se hace en symfony de nuevo si hace falta... (lo que yo veo mucha más perdida de dinero de esta manera que de la otra).

    Por lo menos he visto que se puede poner doctrine y twig en codeigniter y estoy pensando en usarlo, así puedo reutilizar código en el futuro o en mi tiempo libre el intentar hacer la misma web de forma de aprendizaje...

    Pd: lo que más me cabrea es que me metí en el proyecto (me pasaron la web hecha en php a pelo y ahora la vamos a rehacer, y en el futuro posiblemente otra vez) porque le dije que se lo hacia usando symfony y que evitaríamos los millones de fallos y problemas que tiene la web y que para arreglar es un mundo, para que ahora llegue un listo y le diga "este es mejor" y no importe nada mi decisión, de la que creo es la correcta.

    Un saludo!!

    Alberto Vioque Muñoz el 29 de agosto de 2013, 17:41:01

  8. Super !!

    Víctor Puertas el 29 de agosto de 2013, 18:06:16

  9. Eliminas la sección dedicada a Sonata al mismo tiempo que parece que no hay una intención real de sacar un Admin Generator como lo había en la "clásica" rama 1.x.

    ¿Qué camino recomiendas para hacer un Backend relativamente complejo? ¿Algún Bundle al que prestar más atención que a otro?

    Enhorabuena Javier por este curro, los 10€ mejor invertidos en mucho tiempo la compra de tu libro. Ojalá este ejemplo cundiese en este sector.

    Francisco Espinosa el 29 de agosto de 2013, 20:41:42

  10. Excelente trabajo Javier mi mas sinceras felicitaciones, y agradecido por incluir esta actualización a los que compramos el libro anterior, un saludo desde Caracas, Venezuela.

    Piero Recchia el 29 de agosto de 2013, 23:24:22

  11. Genial gacias por tu trabajo. Por cierto ya vi un error de tipeo a corregir :)

    En la pagina 20, segundo parrafo "Symfony 2.3 se publicó en junio de 2013, casi ods años después que Symfony 2.0"

    Domingo Oropeza el 30 de agosto de 2013, 4:48:53

  12. @Alberto, como ya te han comentado, CodeIgniter ha sido abandonado oficialmente por la empresa que lo creó. Así que dudo que en el futuro se pueda encontrar gente de CodeIgniter, una vez que el proyecto esté totalmente muerto.

    @Francisco, me temo que no tengo una respuesta a tu pregunta :( No conozco alternativas viables para el admin generator. Cuando se publicó Symfony2, la "excusa" oficial era que no había admin generator porque los formularios no estaban acabados. Dos años después, los formularios siguen sin acabarse y han cambiado totalmente su funcionamiento tres veces (una para cada versión de Symfony2). Mientras, en el repositorio oficial de Symfony se acumulan cientos de bugs relacionados con los formularios y en la comunidad no hay ningún interés por cambiar las cosas :(

    @Domingo, gracias por avisarme del error. Ya está corregido.

    Javier Eguiluz el 31 de agosto de 2013, 13:08:19

  13. @Javier Eguiluz, lo sé, pero ya sabes como son estas cosas, oyen "más barato, ahora!!!" y les da igual las consecuencias, aunque en el futuro sea más caro (el caso es que la web hecha en php lleva dos meses y ahora la vamos a rehacer en codeigniter para posiblemente en dos años pasarlo a otra cosa mejor...)

    Sobre los cambios en los formularios, da la sensación que no saben como encajar esto, no creo que sea bueno para symfony tantos cambios en algo tan importante, cada vez que lanzan una nueva versión tienes que modificar el código y eso no nos ayuda en nada, crean desconfianza y mala fama, espero que logren la formula mágica una vez más.

    Alberto Vioque Muñoz el 1 de septiembre de 2013, 11:28:34

  14. @Alberto, aquí igual tengo que darles algo de razón. Realmente algo ya hecho migrarlo a codeigniter es bastante trivial, sobre todo porque te va a permitir copy/paste inicialmente incluso de funciones spaguetti. Ahora pasarlo a symfony no lo veo tan rápido ...

    Synfony, como todo sistema que te dicta un camino relativamente rígido, requiere quizás sentarse a pensar bastante antes de empezar, sino te puedes dar un buen tortazo.

    Gonzalo González Domínguez el 2 de septiembre de 2013, 14:15:53

  15. @Gonzalo, el problema es que no se puede reutilizar nada, se equivocaron a la hora de plantear el funcionamiento de la web, no vale ni la base de datos, ni el html (se ha cambiado el diseño), ni el código ya que no se seguía ni un MVC como en teoría funciona. Total es un proyecto nuevo, lo único que se puede utilizar son los errores cometidos para evitarlos. La web va a ser grande, de la parte frontal tiene uno 38 pantallazos iniciales y faltarán otros tantos así, y el backend igual, y en este solo está lo básico para que funcione el frontend, luego llevara trabajo de CRM y estadísticas. Por eso propuse symfony, porque es una web a mi parecer que le vendría bien, sobre todo por el mantenimiento que esta va a llevar.

    Alberto Vioque Muñoz el 2 de septiembre de 2013, 16:56:23

  16. Update del punto 3.4.2: Parece que el flag --structure=no de generate:bundle ya no va así, si se pone --sctructure crea la estructura si no se añade no la crea. No lo veo documentado en la página oficial. El error devuelto es el siguiente:

    [RuntimeException] The "--structure" option does not accept a value.

    Gonzalo González Domínguez el 3 de septiembre de 2013, 13:01:57

  17. Estuve leyendo sobre la inexistencia de un bundle oficial para el admin-generatir... quisiera que me aconsejes cual seria la manera mas factible! trate de usar el sonata pero medio complicado y no le pude dar el funcionamiento completo! que me aconsejas ?.. y otra cosa yo compre el libro 2.0 deberia poder descargar la version 2.3 gratis verdad ??? (segun lo que ofrecen)

    Jose Yasmanny Vasquez Arnez el 11 de septiembre de 2013, 15:41:46

  18. @Jose lo tienes en el enlace libro del menú tanto para leer online como descarga.

    Gonzalo González Domínguez el 11 de septiembre de 2013, 21:02:38

  19. Genial!!! ahora a migrar mi app creada con symfony2.1 a la nueva 2.3!

    Ricky Sarapura el 9 de octubre de 2013, 9:04:46

  20. Esto es lo que pone en el libro 2.3 en la página 176:

    <li>{% render "CiudadBundle:Default:listaCiudades" %}</li>

    Cuando debería poner:

    <li>{{ render(controller('CiudadBundle:Default:listaCiudades')) }}</li>

    En la web si que está bien.

    Un saludo y felicitaciones por tu magnífico libro. Me está ayudando mucho en el curro.

    Juan Antonio García Navalón el 20 de noviembre de 2013, 9:10:24

  21. Por lo visto en el resto del libro pasa lo mismo, no has actualizado las etiquetas render.

    Yo de todas formas lo sigo por la web.

    Juan Antonio García Navalón el 20 de noviembre de 2013, 9:12:10

  22. Perdón por los anteriores comentarios. He vuelto a descargar el libro y están bien. Fallo mío. Debí descargar la versión incorrecta.

    Saludos.

    Juan Antonio García Navalón el 20 de noviembre de 2013, 14:58:16

  23. Un saludo y felicitación por el nuevo libro.

    jag el 7 de diciembre de 2013, 14:22:59

Este artículo ya no permite añadir más comentarios.
¿Por qué? Los artículos cierran sus comentarios automáticamente unos meses después de su publicación para asegurar que estos sigan siendo relevantes.

Publicada el

27 de agosto de 2013

Proyectos Symfony destacados

La plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.