Filtros por Proveedor (sonata.media.provider) de archivos Media en SonataAdmin

Crear un filtro en una Admin Class de SonataAdminBundle es una tarea bastante sencilla.

Si vamos un poco más allá, podemos necesitar configurar un filtro de una propiedad de una entidad relacionada con la que estamos administrando.

Supongamos que tenemos una entidad Prensa, con un campo relacionado con un Media de SonataMediaBundle, y queremos filtrar el listado por el tipo de proveedor del Media (sonata.media.provider.*).

Primero muestro la relación en nuestra entidad (Entity).

Prensa.php

Como se puede ver, es una relación Uno a Uno (OneToOne).

Segundo, creamos el contexto

sonata_media.yml

El nombre del contexto (context), definido en la línea 7, es el que utilizaremos en la Admin Class para SonataAdminBundle en el siguiente paso.

Tercero y el motivo de este Post, creamos el filtro en la Admin Class

PrensaAdmin.php

Como se puede ver en la línea 42, el primer parámetro de add() es el nombre del campo en la entidad Prensa, seguido por el nombre del campo de la segunda entidad, separados por un punto.

Para calcular los proveedores del contexto, nos fijamos de la línea 31 a la 40, aquí recuperamos este listado, utilizando el nombre del contexto creado para esta entidad.

El array con el listado de los proveedores (sonata.media.provider) se pasa al filtro en la línea 44.

Referencias

En la documentación de SonataMediaBundle, podemos encontrar la información de como filtrar por las propiedades de una subentidad, FILTERING BY SUB ENTITY PROPERTIES