10 bundles que deberías conocer si vas a trabajar con Symfony

Bundles que te ayudarán a desarrollar un proyecto con Symfony

Image for post
Image for post

English version: https://medium.com/@ger86/10-packages-you-should-know-if-you-are-going-to-work-with-symfony-497b116be428

Actualizado a día 2 de septiembre de agosto de 2019

Esta mañana he realizado una recopilación de los bundles que casi siempre acabo instalando en los proyectos que desarrollo con Symfony. No son todos los que están ni están todos los que son pero creo que por la funcionalidad que aportan y la versatilidad que ofrecen a la hora de configurarlos merecía la pena hablar un poco de ellos. Así que… ¡allá vamos!

1. FOSUserBundle

Cualquier recopilatorio que se precie debe contener este fantástico bundle proporcionado por Friends of Symfony el cual provee la funcionalidad básica para trabajar con usuarios en Symfony.

Entre sus principales características se encuentra la definición de un modelo básico para definir la entidad usuario, un provider para cargar usuarios por username o email así como todo el proceso (junto con sus rutas, formularios y controladores) para que los usuarios puedan registrarse, iniciar sesión, validar su cuenta o recuperar la contraseña.

Todo esto hace de FOSUserBundle el mejor punto de partida si tenéis que integrar cuentas de usuario en vuestra aplicación de una forma rápida.

Actualización. Gracias al MakerBundle es posible también crear el código boilerplate de nuestro sistema de autenticación de una forma bastante sencilla mediante los comandos make:user , make:auth y make:registration-form por lo que si ya estáis familiarizados con Symfony 4 y la gestión de usuarios esta es la mejor opción, especialmente en el caso de que vayáis a necesitar ampliar la lógica del sistema con la vuestra (algo que con el FOSUserBundle se complica algo más pues es necesario recurrir al sistema de eventos que trae implementado para modificarla).

2. SonataAdminBundle

Para mí, el mejor bundle que podéis instalar si necesitáis montar un panel de administración para vuestra aplicación.

Pese a que SonataAdminBundle puede tener una curva de aprendizaje algo más elevada que EasyAdmin, su gran versatilidad nos permite crear un panel que resuelva prácticamente cualquier necesidad que tengamos. Las operaciones CRUD son configuradas mediante servicios especiales etiquetados como sonata.admin, y su implementación es muy muy rápida, apenas 50 líneas de código.

Además, se pueden crear blocks para añadir funcionalidad extra al panel. Y sí, también soporta la exportación de datos a diversos formatos.

3. FOSElasticaBundle

Nuevamente Friends of Symfony acude al rescate, esta vez para ayudarnos a integrar ElasticSearch en nuestra aplicación. FOSElastica, basado en la librería Elastica de Ruflin, nos permite definir por medio de un archivo yamllos índices, los tipos de documentos que en ellos almacenaremos y el mapeo de nuestras entidades de una forma tan sencilla que parece magia. Nuevamente, otro bundle imprescindible.

Además regularmente se actualiza para soportar las nuevas versiones que van saliendo de ElasticSearch por lo que podemos tener garantizado que se integrará sin problemas con este fantástico servicio.

4. Doctrine Behavioral Extensions

En el caso de que necesitéis acciones automáticas sobre vuestras entidades como generar el slug a partir de otras propiedades, establecer la fecha de creación o modificación de forma automática o añadir la posibilidad de traducirlas, Doctrine Behavioral Extensions son vuestra mejor opción.

Tras instalarlas, accederemos a todas estas funcionalidades con tan solo definir las anotaciones pertinentes en las propiedades de vuestra entidad (o a través de un archivo yaml si estáis empleando ese método de configuración).

5. HWIOAuthBundle

Si necesitáis añadir la posibilidad de iniciar sesión empleando Facebook o cualquier otra red social, HWIOAuthBundle es perfecto, ya que con tan solo definir los listeners adecuados el inicio de sesión mediante terceros quedará perfectamente integrado en vuestra aplicación.

Además es compatible, como no podía ser de otro modo, con FOSUserBundle, por lo que ambos os resolverán todo el tedioso proceso de añadir un login en vuestra aplicación. Y sí, también contempla y da solución al problema de la duplicación de usuarios cuando su email ya existe e inicia sesión a través de una red social, algo que no siempre se gestiona bien.

6. SonataMediaBundle

Antes os hablábamos de SonataAdminBundle como uno de los mejores paneles de administración que podéis encontrar. Bien, pues SonataMediaBundle hace que trabajar con imágenes o archivos sea realmente sencillo desde ese mismo panel.

Además, tiene integración directa con Amazon lo cual nos permite trabajar con S3 como CDN de forma muy fácil. También provee de la posibilidad de establecer contextos, los cuales sirven para especificar el tamaño de los thumbnails que se generarán cuando se suba una imagen, algo que es de agradecer, ahorrándonos de este modo bastante tiempo.

7. API Platform y FOSRestBundle

Con la aparición de React, Angular y el resto frameworks para el desarrollo frontend, se ha hecho indispensable poder montar API’s de una forma rápida y sencilla.

Para ello la mejor opción es emplear el bundle API Platform el cual puede instalarse mediante una receta de composer/flex y que resuelve de una forma muy sencilla la creación de una API básica para nuestras entidades. Además cuenta con una documentación muy extensa y tiene integración nativa con Mercure (protocolo para enviar push updates a los navegadores).

Otra alternativa a este sistema la encontramos en FOSRestBundle con el cual también podremos crear una API Rest desde 0, especificando las características de cada ruta, el formato en el que se devolverán los datos (JSON rulez) y empleando los distintos grupos de serialización que definamos para devolver determinadas propiedades de nuestros objetos en función de la ruta visitada.

8. Symfony Serializer Bundle y JMSSerializerBundle

Si necesitamos serializar nuestras entidades (por ejemplo, para enviarlas a servicios de terceros como Algoria), Symfony posee un componente llamado Serializer que permite llevar a cabo esta tarea de forma bastante sencilla. Nada más instalarlo dispondremos de un completo serializador que además nos proveerá de opciones como la posibilidad de especificar grupos de serializado (pues no siempre querremos serializar todas las propiedades) y la definición de callbacks para controlar todo el proceso.

Otra opción es recurrir al bundle JSMSerializer el cual sin embargo está siendo ya sustituido por el componente nativo de Symfony. Al igual que el anterior permite especificar las propiedades que serán devueltas mediante grupos de serialización y engancharnos mediante eventos a las distintas partes del proceso.

9. WebpackEncore

La llegada de webpack supuso una verdadera revolución a la hora de gestionar los css, js y assets de nuestra aplicación. WebpackEncoreBundle nos permite integrarlo directamente en nuestra aplicación pudiendo acceder además a todas sus opciones mediante un archivo de configuración propio residente en la raíz de nuestro proyecto. Un bundle imprescindible sobre todo ahora que la versión 4 de Symfony lo recomienda como método para organizar nuestros assets.

10. KNPSnappyBundle

Eeste bundle el cual nos permite generar PDF’s como si de archivos HTML se tratase, ya que lo que hace es es recibir una plantilla Twig y generar el pdf correspondiente. En nuestra opinión, es un sustituto natural de la librería FPDF, ya que agiliza mucho el proceso de generar PDF’s. Eso sí, requiere que tengáis instalada la librería WKHTMLTOPDF en nuestro servidor.

Y con esto termina esta pequeña lista de los bundles que uso más regularmente. Como seguro que me he dejado alguno os animo a dejarlo en los comentarios para que el resto de lectores pueda conocerlos.

¿Quieres recibir más artículos como este?

Suscríbete a nuestra newsletter:

Written by

Entre paseo y paseo con Simba desarrollo en Symfony y React

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store