Skip to content

sokil/FileStorageBundle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FileStorageBundle

Working with different filesystems, managing file metadata in Doctrine ORM. Storing metadata allows to prevent loading same file twice by checking file hash.

Build Status

Installation

Add composer dependency:

composer require sokil/file-storage-bundle

Add bundle to AppKernel:

<?php

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Knp\Bundle\GaufretteBundle\KnpGaufretteBundle(),
            new Sokil\FileStorageBundle\FileStorageBundle(),
        );
    }
}


Configuration

Configuration of supported filesystems

This bundle uses gaufrette as filesystem abstraction, so you need to configure filesystem in app config:

knp_gaufrette:
    adapters:
        acme.attachments_adapter:
            local:
                directory:  "%kernel.root_dir%/attachments"
                create:     true
    filesystems:
        acme.attachments_filesystem:
            adapter: acme.attachments_adapter

You need then pass this filesystem name to your code. For example define parameter in extension of your bundle:

<?php
namespace AcmeBundle\DependencyInjection;

class AcmeExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        if (isset($config['attachments_filesystem'])) {
            $container->setParameter(
                $this->getAlias() . '.attachments_filesystem',
                $config['attachments_filesystem']
            );
        }
    }
}

And then in application config:

acme:
    attachments_filesystem: "acme.attachments_filesystem"

Now you may use configured filesystems in your controller:

<?php

$attachmentFilesystem = $this
    ->get('knp_gaufrette.filesystem_map')
    ->get($this->getParameter('acme.attachments_filesystem'));


Move local file to filesystem

This bundle usefull for moving local files into some external filesystems and add record to database about file. First we need to create some file entity. File entity holds useful metadata about stored file.

<?php

$file = new File();
$file
    ->setName('some.txt')
    ->setSize(4242)
    ->setCreatedAt(new \DateTime())
    ->setMime('text/plain')
    ->setHash('some_hash_of_file_content');
            
$this
    ->get('file_storage')
    ->write(
        $file,
        'acme.attachments_filesystem',
        'some content of file'
    );
    
$fileId = $file->getId(); // now you have id of file


See also