Installation
composer require da-vinci-studio/file-bundle
(Note: This package is outdated and designed for Symfony, not Laravel. Adaptation required.)
Directory Setup
Create a directory (e.g., storage/app/document) for file storage.
Configuration
Manually define a service in config/services.php (Laravel equivalent of Symfony’s AppKernel):
'dvs.file_receiver' => \Dvs\FileBundle\Service\FileReceiver::class,
First Use Case
Inject FileReceiver into a controller/service and upload a file:
use Dvs\FileBundle\Service\FileReceiver;
public function upload(Request $request, FileReceiver $receiver) {
$file = $request->file('document');
$receiver->save($file, 'document'); // 'document' = filesystem key
}
File Handling
Use FileReceiver to abstract file storage logic:
$receiver->save($file, 'document', [
'original_name' => true, // Preserve original filename
'overwrite' => false, // Avoid overwrites
]);
Filesystem Integration
Extend with Laravel’s Filesystem facade for consistency:
$receiver->setFilesystem(Storage::disk('local'));
Validation
Validate files before saving (Laravel’s ValidatedRequest):
public function store(ValidatedRequest $request) {
$request->validate(['file' => 'required|mimes:pdf,docx']);
}
Custom Storage Paths Override paths dynamically:
$receiver->setBasePath('custom/path');
Event Listeners
Trigger events post-upload (Laravel’s Events):
event(new FileUploaded($filePath));
Symfony Dependency
OneupFlysystemBundle. Use Laravel’s League\Flysystem or spatie/laravel-medialibrary as alternatives.Outdated Code
save() may not align with Laravel’s UploadedFile interface. Wrap files:$receiver->save($request->file('file')->getRealPath(), 'document');
Configuration Rigidity
parameters.yml is Symfony-specific. Use Laravel’s .env or config/filesystems.php.Log File Paths Add debug logs for generated paths:
\Log::debug('File saved to:', $receiver->getPath());
Filesystem Adapter
Ensure the adapter matches Laravel’s FilesystemManager:
$receiver->setAdapter(Storage::disk('local')->getAdapter());
Custom Naming Strategy
Override FileReceiver to implement unique naming (e.g., UUIDs):
class CustomFileReceiver extends FileReceiver {
protected function generateFilename() {
return Str::uuid() . '.' . $this->getExtension();
}
}
Post-Processing
Chain with Laravel’s AfterUploading events or queues:
FileUploaded::dispatch($file)->after(function ($event) {
// Process file (e.g., generate thumbnail)
});
Testing
Mock FileReceiver in tests:
$receiver = Mockery::mock(FileReceiver::class);
$receiver->shouldReceive('save')->once();
How can I help you explore Laravel packages today?