Synfony 4: exporter personalizado

Escenario

El bunde de SonataAdmin para Symfony te permite crear listados exportables sin apenas esfuerzo. Por defecto, ofrece la posibilidad de exportar a csv, xls, json y xml. Basta con crear el fichero Admin correspondiente a la entidad. Por ejemplo si quisiéramos que un listado de facturas de nuestra aplicación pueda ser exportado a Excel, deberemos crear primero la clase de tipo Admin, InvoiceAdmin, en la que sobreescriberemos dos métodos extendidos de la clase AbstractAdmin. getExportFormats() para indicar qué formatos queremos que estén disponibles en el listado para exportar y getExportFields() en el que definiremos los campos que queremos que figuren el fichero exportado.

Problema

Los campos de fecha e importe no vienen formateados cómo quiere el cliente. Podría crear dos métodos adicionales en la entidad Invoice que devolvieran el campo transformado. Por ejemplo: Y, en el fichero de InvoiceAdmin: Es una solución, y de hecho la he empleado para los campos de fecha, pero para el de importe no conseguía que se mostrara correctamente en el fichero Excel exportado, cuando en el listado HTML sí aparecía correctamente.

Solución

Primero damos de alta un Writer para un nuevo tipo de fichero (xlsx) en la aplicación. La clase ha de implementar los métodos de la interfaz TypedWriterInterface. A continuación registramos el servicio en services.yaml y a correr. Para el writer he utilizado la biblioteca PhpOffice\PhpSpreadsheet y me he inspirado en un gist algo desfasado, pero que me ha puesto sobre la pista: Añadimos el siguiente bloque en el fichero de configuracón de servicios services.yaml El nuevo formato en el fichero de InvoiceAdmin Y, por último, en el fichero translation/SonataAdminBundle.es.xlf incluimos el siguiente bloque de traducción:
Nota: Estoy usando la versión de Symfony 4.4 y la 3.78.1 de SonataAdmin. Es posible que, para que te funcione, tengas que instalar el bundle de sonata Exporter.

Publicaciones Similares

  • Degradación de MySql: de la versión 8.0.30 a la 5.7.39

    Escenario Seguro que no somos los primeros a quien les pasa que una actualización obligatoria de Ubuntu 18.04 al 20.04 acarrea una actualización no deseada de MySql a la versión 8.x. Problema En la versión 8.0.30 MySql no cuenta con la utilidad mysql_upgrade para dejar las tablas preparadas para una actualización de versión. En esta…

  • Instalación y configuración de Guacamole 1.3

    Escenario Necesitamos acceder de manera remota a nuestro entorno de trabajo y hemos decidido que guacamole es nuestra mejor opción. Permite el uso de protocoles estándares como VNC, RDP y SSH No requiere instalar software en las máquinas de los usuarios. Gracias a HTML5, una vez instalado en un servidor, puedes acceder a tu escritorio…

  • Sonata Admin: cómo redireccionar un usuario según su rol

    Escenario Una aplicación symfony 4.4 con el framework Sonata Admin 3.78.1 cuenta con una página de login para que los administradores del sitio puedan gestionar sus clientes. Ahora queremos que los clientes puedan usar la misma página de login para acceder a sus datos personales como, por ejemplo, sus facturas. Para la gestión de usuarios…

  • |

    Actualización de Apache Guacamole server 1.0 → 1.2

    Escenario En el trabajo usamos Apache Guacamole para conectarnos a nuestros escritorios de la oficina desde casa. Apache Guacamole proporciona una puerta de entrada HTML5 para conectar con servicios de acceso remoto, como pueden ser VNC o RDP. Consta de dos : el servidor y el cliente que no tienen por qué correr en la…

  • Sustitución del mapeo original de FOSUserBundle en symfony2

    Para un nuevo proyecto en PHP que estamos empezando, hemos decidido utilizar la plataforma symfony2. En el pasado he tenido la suerte de trabajar, disfrutar y aprender con symfony 1.x, gracias a su coherente organización, buen uso del PHP y unos robustos cimientos fundados en una extensa documentación y una vasta comunidad de activos desarrolladores.

  • Sonata Admin: el calendario no se cierra

    Escenario Incluir un filtro de rango de fechas en SonataAdmin que use un calendario para seleccionar la fecha es más o menos fácil. Primero añadimos el siguiente bloque en el admin de nuestra entidad:

    Y la siguiente clave bajo form_themesen el fichero config/packages/twig.yaml:

    Problema El calendario no se cierra automáticamente cuando se selecciona…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *