Interfaz unificado para sistemas de ficheros en Symfony con OneupFlysystemBundle

pexels-luis-gomes-546819.jpg
Solucionex
14
Jun 22

En algunos de nuestros proyectos podemos encontrarnos en la situación de querer utilizar diferentes tipos de sistemas de ficheros bien sea almacenamiento local, Amazon S3, FTP..., en estos casos es conveniente abstraer el uso del sistema de ficheros que nos permita modificar la configuración del sistema de ficheros sin modificar el código, en symfony tenemos disponible el paquete OneupFlysystemBundle que realiza justamente esa función.

Instalación y configuración

Instalamos el paquete:

composer require oneup/flysystem-bundle

Tenga en cuenta que si quiere utilizar adaptadores para algunos sistemas de ficheros tendrá que instalar dependencias adicionales como league/flysystem-aws-s3-v3 para utilizar Amazon S3

Asegúrese que el bundle está registrado

En config/packages/oneup_flysystem.yaml configuraremos nuestros sistemas de ficheros

oneup_flysystem:
    adapters:
        my_adapter:
            local:
                location: "%kernel.root_dir%/cache"

    filesystems:
        my_filesystem:
            adapter: my_adapter
            visibility: private # optional
            directory_visibility: private # optional

Hay dos conceptos importantes:

  • adapters: Realizan la integración con el sistema de ficheros
  • filesystems: Proporcionan los servicios a la aplicación

Uso

Una vez instalado y configurado tendremos tantos servicios disponibles como filesystems hemos configurado con el nombre oneup_flysystem.%s_filesystem donde %s es la clave de tu filesystem en nuestro ejemplo sería oneup_flysystem.my_filesystem_filesystem, ese servicio es de tipo \League\Flysystem\Filesystem y tiene los métodos habituales para manejar ficheros.

+Info

Documentación del bundle con enlaces sobre los adaptadores

Integración de OneupFlysystemBundle con VichUploaderBundle