adsign/filemanager-bundle
Multilingual file manager bundle for Symfony: upload/download/rename/delete files, create folders, public/private areas, responsive Bootstrap UI, list/thumbnail views, image previews, multiple configs, pattern-based restrictions, and integration with TinyMCE and FOSCKEditor.
Installation
composer require adsign/filemanager-bundle
Add to config/bundles.php:
return [
// ...
Adsign\FileManagerBundle\AdsignFileManagerBundle::class => ['all' => true],
];
Basic Configuration
Create a config file at config/packages/adsign_filemanager.yaml:
adsign_filemanager:
directories:
default:
path: '%kernel.project_dir%/public/uploads'
acl: true
upload_formats: ['jpg', 'png', 'gif']
First Use Case: Embedding in a Twig Template
{{ render(controller('AdsignFileManagerBundle:Default:index', {
'config': 'default',
'tree': true,
'view': 'list'
})) }}
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
php bin/console cache:clear
/filemanager (default route).{{ render(controller('AdsignFileManagerBundle:Default:upload', {
'config': 'default',
'targetUrl': path('your_upload_handler')
})) }}
use Adsign\FileManagerBundle\Manager\FileManager;
public function uploadHandler(Request $request, FileManager $fileManager)
{
$response = $fileManager->upload($request, 'default');
return new JsonResponse($response);
}
tinymce.init({
selector: 'textarea',
plugins: 'filemanager',
external_filemanager_path: '/filemanager',
filemanager_title: 'File Manager',
external_plugins: {
'filemanager': '/filemanager/tinymce4/plugin.min.js'
}
});
tinymce plugin is enabled in config/packages/adsign_filemanager.yaml:
adsign_filemanager:
tinymce: true
$config = [
'path' => $customPath,
'acl' => false,
'upload_formats' => ['pdf', 'docx'],
'max_file_size' => '10M'
];
$fileManager->setConfig($config);
$fileManager->upload($request, 'default');
$fileManager->delete('default', 'path/to/file.jpg');
$url = $fileManager->getUrl('default', 'path/to/file.jpg');
{{ render(controller('AdsignFileManagerBundle:Default:index', {
'config': 'default',
'tree': true,
'root': '/custom/root/path'
})) }}
FileManagerType for file upload fields:
use Adsign\FileManagerBundle\Form\Type\FileManagerType;
$builder->add('document', FileManagerType::class, [
'config' => 'default',
'multiple' => true,
'required' => false
]);
# config/routes.yaml
adsign_filemanager_api:
resource: '@AdsignFileManagerBundle/Resources/config/routing/api.yaml'
prefix: /api/filemanager
services:
app.file_manager.acl:
class: App\Service\CustomAclService
tags:
- { name: adsign_filemanager.acl }
Implement Adsign\FileManagerBundle\Service\AclInterface.config/packages/adsign_filemanager.yaml:
adsign_filemanager:
thumbnails:
small: [100, 100]
medium: [300, 300]
www-data) has write permissions to the upload directory:
chmod -R 775 %kernel.project_dir%/public/uploads
chown -R www-data:www-data %kernel.project_dir%/public/uploads
For private folders, verify ACL settings in the config.composer dump-autoload and clear the cache:
php bin/console assets:install
php bin/console cache:clear
Ensure assets are published:
php bin/console adsign:filemanager:assets:install
config/routes.yaml:
adsign_filemanager:
resource: '@AdsignFileManagerBundle/Resources/config/routing.yml'
prefix: /{_locale}
requirements:
_locale: en|fr
# php.ini
upload_max_filesize = 20M
post_max_size = 20M
For Nginx, add to server block:
client_max_body_size 20M;
php bin/console doctrine:schema:update --force
config/packages/dev/adsign_filemanager.yaml:
adsign_filemanager:
debug: true
This logs file operations to var/log/dev.log.blueimp upload logs:
$.blueimp.fileupload.prototype.options.done = function(e, data) {
console.log('Upload response:', data.result);
};
validate command:
php bin/console adsign:filemanager:validate
rm -rf %kernel.project_dir%/public/uploads/thumbs/*
FileFilter service:
services:
app.custom_file_filter:
class: App\Service\CustomFileFilter
tags:
- { name: adsign_filemanager.file_filter }
Implement Adsign\FileManagerBundle\Filter\FileFilterInterface.use Adsign\FileManagerBundle\Event\FileUploadEvent;
public function onFileUpload(FileUploadEvent $event)
{
if ($event->getFile()->getExtension() === 'pdf') {
$event->setAllowed(true);
}
}
Register in services.yaml:
services:
App\EventListener\FileUploadListener:
tags:
- { name: kernel.event_listener, event: adsign.filemanager.upload, method: onFileUpload }
vendor/adsign/filemanager-bundle/Resources/views/ to templates/AdsignFileManagerBundle/Default/ to customize.Adsign\FileManagerBundle\Storage\StorageInterface for S3, FTP, etc.:
services:
app.s3_storage:
class: App\Storage\S3Storage
How can I help you explore Laravel packages today?