Symfony. JMS Serializer y Sonata Media

Cómo serializar objetos Media de Sonata con JMS Serializer

Image for post
Image for post
Serializando objetos de SonataMedia

Con este pequeño artículo pretendo dejaros una de las clases que más utilizo cuando uso Symfony para montar las API’s de las aplicaciones que me encargan. Espero que os sirva de ayuda y que me digáis si corregiríais o añadirías algo.

El caso es el siguiente. Supongamos que estamos montando una API (posiblemente sobre FOSRestBundle) y que para cargar imágenes hemos escogido el bundle Sonata Media, aprovechando que se integra de lujo con S3 y que trae de gratis bastante funcionalidad ya implementada como la generación de thumbnails. El problema viene cuando queremos serializar nuestros objetos de cara a devolver las URL’s de las imágenes desde nuestra API, ya que ninguno de los campos de dicha entidad tiene almacenada la URL del recurso sino que ésta se genera a partir de varios métodos del que tenga asignado.

Bien, pues si estáis empleando el bundle JMS como serializador de vuestros objetos, podéis añadir la clase que os dejo en el siguiente snippet:

MediaSerializer class

Como veis, la clase es bastante sencilla. Con el método seleccionamos la clase sobre la que actuaremos en el momento de la serialización y el método encargado de llevar a cabo el proceso, en este caso . Dentro de él, accedemos al asociado al media y generamos el path asociado a , que es el nombre que SonataMedia da al thumbnail con la imagen original sin recortar ni redimensionar (por lo que aquí podríamos cambiar al nombre del thumbnail si preferimos devolver la url de un formato determinado).

Por último, tan solo queda configurar este servicio para que JMS se “entere” de que tiene que emplearlo, lo cual hacemos del siguiente modo:

App\Serializer\MediaSerializer:  tags:    - { name: jms_serializer.subscribing_handler }

Es decir, etiquetamos nuestro servicio con con el fin de que sea invocado durante el proceso de serialización.

Como veis, es un código bastante sencillo pero que conviene tener a mano cuando trabajáis en la implementación de una API empleando por detrás SonataMedia. Espero que os haya servido y, como decía al principio, si teneis dudas o sugerencias estoy encantado de leerlas.

¿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