20 cosas que deberías saber de Symfony 4

20 consejos para trabajar con Symfony

Hoy os quiero presentar una recopilación de consejos o cosas que hay que saber si vais a comenzar a trabajar con Symfony. Así podréis conocer desde una perspectiva amplia los principales elementos de los que dispone por si os animáis a desarrollar con este framework; yo llevo haciéndolo desde 2012 y la verdad es que se ha convertido en un compañero indispensable en mi trabajo. Además, la llegada en el paso noviembre de su versión 4 ha supuesto un gran lavado de cara, posicionándose como uno de los principales frameworks de PHP, tanto por su versatilidad como por su rendimiento. Así que vamos a ello.

1.- Symfony usa Flex

La llegada de Flex a Symfony ha revolucionado la forma en que gestionamos las dependencias de nuestros proyectos, haciendo que éstas sean mucho más fáciles de manejar y permitiendo emplear lo que se conoce como recipes para realizar acciones básicas en su configuración.

2.- Webpack para manejar los assets

Es indudable que webpack se ha posicionado como la herramienta de referencia para trabajar con los assets de nuestra aplicación. Si bien Assetic cubrió bien esta funcionalidad hasta la versión 3, la integración de webpack en Symfony gracias al bundle Webpack Encore ha logrado que trabajar con nuestros archivos Javascript y CSS sea realmente sencillo.

3.- Cada archivo en su sitio

Symfony 4 ha definido una nueva estructura de carpetas que permite a los equipos de desarrollo trabajar de una forma mucho más organizada. Se terminó el tener archivos de todo tipo distribuidos a lo largo de los distintos bundles de nuestra aplicación. Ahora todos los assets se guardan en la carpeta homónima, así como los templates y los tests. El resto de nuestro archivos, que componen el backend de nuestra aplicación quedarán alojados en la carpeta src.

4.- Symfony 4 es muy ligero

Otra de las ventajas que ha supuesto la llegada de Symfony 4 y Flex es la desaparición de la Symfony Standard Edition, es decir, la versión instalada por defecto cuando comenzábamos un proyecto de Symfony. En ella aparecían numerosos componentes que problablemente no necesitábamos. Ahora Symfony es mucho más ligero, permitiéndonos instalar solo aquellos paquetes que de verdad necesitemos.

5.- La magia del Autowire

Autowire en Symfony

Si comienzas a trabajar con Symfony te sorprenderá lo sencillo que es inyectar servicios dentro del resto de elementos de tu aplicación. Esto se ha conseguido mediante la característica conocida como autowire (aparecida por primera vez en Symfony 3) y que, mediante el tipado de los argumentos del constructor de las clases, permite acceder a los servicios que necesitemos.

6.- Panel de administración

Si necesitas un panel CRUD para manejar tus objetos dispones de Sonata Admin que, en mí opinión, es de los bundles más completos que se han desarrollado para Symfony. Es cierto que su curva de aprendizaje es algo más alta que la de otras opciones (Easy Admin) pero su versatilidad lo convierte en la mejor opción.

7.- Integración con distintos tipos de bases de datos

Symfony tiene integración nativa con distintos tipos de bases de datos como pueden ser MySQL (mediante Doctrine por ejemplo) y MongoDB, por lo que crear los modelos de nuestra aplicación y trabajar sobre ellos es muy muy sencillo. Además, si usáis Doctrine no dejéis de consultar las DoctrineExtensions, las cuales proveen de funcionalidad añadida muy interesante como la generación de Slugs y fechas de manera automática.

8.- Twig

Para proyectos sencillos en los que no sea necesario recurrir a frameworks /librerías de Javascript, Twig es una alternativa más que decente. Este sistema de plantillas está integrado con Symfony a la perfección y provee de un gran sistema de herencia mediante bloques así como de funciones y filtros con los que crear el frontend de nuestra aplicación de una forma bastante rápida y, sobre todo, estructurada.

9.- Multiidioma

Gracias al componente translator, hacer que una web hecha sobre Symfony sea multiidioma es realmente sencillo. El texto estático podrá ser almacenado en archivos de traducciones (en su correspondiente carpeta) y con la próxima llegada de Symfony 4.1 las rutas también podrán ser traducidas de este modo. Y si necesitáis mas complejidad, las Doctrine Extension proveen la funcionalidad necesaria para traducir las propiedades de las entidades.

10.- Manejo de usuarios

Friends of Symfony nos provee un bundle conocido como FOSUserBundle que nos da la base para implementar el sistema de usuarios de nuestra aplicación. Además de los handlers necesarios, provee también de rutas ya creadas para iniciar sesión, registrarse y recuperar contraseña, ahorrando bastante trabajo en la implementación de este tipo de funcionalidad.

11.- Creación de API Rests

Nuevamente Friends of Symfony acude al rescate para traernos el bundle FOSRestBundle, con el cual podremos crear una API Rest empleando controladores de Symfony y siguiendo completamente la especificación. Además cuenta con la ventaja de ser ampliamente personalizable; por ejemplo habilitar el parseo de llamadas en formato JSON es cuestión de una línea de configuración, por lo que integrarlo con Angular o React se hace de forma inmediata.

12.- Crear PDF’s

No podemos olvidarnos de otro de los principales contribuyentes de Symfony, KNPLabs, el cual nos trae el bundle KNPSnappy y que permite integrar la librería Wkhtmltopdf, de modo que podamos maquetar nuestros PDF’s mediante plantillas twig y empleando los mismos estilos que el resto de nuestra aplicación.

13.- Seguridad

Y hablando de seguridad, Symfony viene acompañado de un componente muy potente security con el cual podremos controlar el acceso a nuestra aplicación, restringiendo rutas por roles o incluso configurando nuestros propios Voters para determinadas acciones.

14.- GraphQL

GraphQl ha llegado para quedarse, lo cual ha supuesto la aparición de varios bundles que permiten integrar este lenguaje de consultas sin rompernos excesivamente la cabeza. Actualmente el más conocido es el creado por Youshido y que os recomendamos conocer si os queréis adentrar en el desarrollo con GraphQL.

15.- Caché

Symfony 3 fue también una gran iteración de este framework de PHP. Entre una de sus muchas novedades, destaca la aparición de los CacheAdapters, y cuya principal característica es la integración con distintos tipos de caché, como pueden ser APC o Memcached, de forma nativa.

16.- Archivos ENV

Para configurar distintos aspectos de la aplicación mientras desarrollamos, como por ejemplo la ruta a la base de datos o el servidor de correo, Symfony soporta archivos ENV. Posteriormente, en producción bastará con definir esas mismas variables a nivel de servidor. Esto ha permitido a Symfony 4 simplificar muchísimo el modo de trabajar con distintos entornos.

17.- Elastic Search

Nuevamente acude Friends of Symfony al rescate, ahora con el bundle FOSElastica, el cual lleva a cabo la integración con este sistema de búsquedas. De este modo, podremos definir el mapeo de nuestros objetos en los índices así como escribir nuestras propias consultas o definir la forma en qué los datos son cargados.

18.- Trabajar con imágenes

Si antes os hablábamos de Sonata Admin, dentro de este mismo grupos de bundles podéis encontrar Sonata Media, el cual permite trabajar con imágenes a nivel de entidad, de modo que podamos subirlas a un CDN o definir distintos tamaños para mostrarlas. Para nosotros, uno de los bundles imprescindibles.

19.- Comandos

Symfony también da la opción de definir comandos los cuales pueden ser ejecutados directamente desde consola sin renunciar a ningún tipo de funcionalidad. Entre sus usos se encuentra la implementación de “cronjobs” o el trabajo con tareas pesadas como el tratamiento de datos.

20.- Testing

Y finalmente, pero no por ello menos importante, la integración de Symfony con PHPUnit es perfecta, permitiéndonos llevar a cabo tanto tests unitarios como test funcionales y de integración. Además, gracias a su propio crawler podremos también acceder a la respuesta completa de cada llamada así como llevar a cabo tests de navegación.

21.- Y bola extra: el profiler

No podíamos terminar el artículo sin hablar de una de las herramientas más potentes de las que dispone Symfony: el profiler, una barra de desarrollo en la que podremos consultar infinidad de datos de nuestra aplicación, tales como el tiempo de respuesta, la memoria consumida o las llamadas a base de datos ejecutadas.