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

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Composer e instancia AWS t2.micro ec2: ¡no hay memoria suficiente!

    Escenario: Desplegar una aplicación php en una instacia de tipo t2.micro en EC2 utilizando composer.phar. Problema: Este tipo de instancia sólo dispone de 1GB de memoria, insuficiente para instalar las dependencias de un proyecto de tipo symfony por ejemplo. Resultando en un error fatal de este tipo: PHP Fatal error:  Out of memory (allocated 813694976) (tried to allocate 67108864 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/Solver.php on line 220 Soluciones. Pagar un poco más por un…

Deja una respuesta

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