Installation
composer require cekurte/uploaderbundle
Add to config/bundles.php:
return [
// ...
Cekurte\UploaderBundle\CekurteUploaderBundle::class => ['all' => true],
];
Configuration Publish the default config:
php bin/console cekurte:uploader:install
Update config/packages/cekurte_uploader.yaml to match your LiipImagineBundle and OneupUploaderBundle setups.
First Use Case
{{ render(cekurte_uploader('image_field', {
'upload_url': path('oneup_uploader_upload', {'fieldName': 'image_field'}),
'preview_url': path('cekurte_uploader_preview', {'fieldName': 'image_field'}),
'delete_url': path('oneup_uploader_delete', {'fieldName': 'image_field'}),
'max_size': 2097152,
'allowed_types': ['image/jpeg', 'image/png']
})) }}
Form Integration
$builder->add('image', FileType::class, [
'mapped' => false,
'required' => false,
]);
fieldName in the Twig template.Ajax Preview Handling
oneup_uploader_upload.routing.yaml:
cekurte_uploader_preview:
path: /upload/preview/{fieldName}
methods: [POST]
defaults: { _controller: 'CekurteUploaderBundle:Uploader:preview' }
Image Processing
LiipImagineBundle filters in the config:
cekurte_uploader:
image_filters:
thumbnail: { filter: 'thumbnail', options: { size: [200, 200] } }
OneupUploaderBundle’s storage adapters (e.g., AWS S3) via config:
oneup_uploader:
mappings:
image_field:
frontend: oneup_uploader_frontend
storage: oneup_uploader_storage
templates/CekurteUploaderBundle/Uploader/preview.html.twig.Route Conflicts
oneup_uploader_upload, oneup_uploader_delete, and cekurte_uploader_preview routes are unique.php bin/console debug:router if previews fail.CORS Issues
# config/packages/nelmio_cors.yaml
paths:
'^/upload/preview':
methods: [POST]
allow_origin: ['*']
Image Filter Mismatch
LiipImagineBundle filters exist in config/packages/liip_imagine.yaml before use.cekurte_uploader:
debug: true
preview_url path.Custom Preview Logic Override the preview controller:
// src/Controller/UploaderPreviewController.php
namespace App\Controller;
use Cekurte\UploaderBundle\Controller\UploaderController;
class UploaderPreviewController extends UploaderController {
public function previewAction(Request $request, $fieldName) {
// Custom logic (e.g., add watermarks)
return parent::previewAction($request, $fieldName);
}
}
Update routing to point to your controller.
Event Listeners
Subscribe to cekurte.uploader.pre_upload or cekurte.uploader.post_upload events for pre/post-processing:
// src/EventListener/UploaderListener.php
use Cekurte\UploaderBundle\Event\UploadEvent;
class UploaderListener {
public function onUpload(UploadEvent $event) {
$file = $event->getFile();
// Modify $file or $event->stopPropagation();
}
}
Register in services.yaml:
services:
App\EventListener\UploaderListener:
tags:
- { name: kernel.event_listener, event: cekurte.uploader.post_upload, method: onUpload }
Asset Configuration Dynamically set allowed types/sizes via Twig:
{{ render(cekurte_uploader('image_field', {
'allowed_types': app.parameter('allowed_image_types'),
'max_size': app.parameter('max_image_size')
})) }}
How can I help you explore Laravel packages today?