Installation via Symlink (Recommended for development):
src/Awaresoft directory.FileBundle to your project’s vendor (if using Composer) or directly include it in your autoloader.composer.json includes the dependency (if not symlinked):
"repositories": [
{ "type": "path", "url": "../src/Awaresoft/FileBundle" }
],
"require": {
"awaresoft/file-bundle": "*"
}
composer update and clear cache:
php bin/console cache:clear
Enable the Bundle in config/bundles.php:
return [
// ...
Awaresoft\FileBundle\AwaresoftFileBundle::class => ['all' => true],
];
First Use Case: File Uploads with Sonata Admin
use Awaresoft\FileBundle\Admin\FileAdmin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
class MyFileAdmin extends AbstractAdmin {
protected function configureFormFields(FormMapper $formMapper) {
$formMapper
->add('file', 'sonata_type_file', [
'label' => 'File',
'required' => false,
'delete_orphan' => true,
'sonata_type_file' => [
'provider' => 'sonata.media.provider.file', // Default provider
'context' => 'default',
],
]);
}
}
config/packages/sonata_admin.yaml:
sonata_admin:
managers:
file:
class: Awaresoft\FileBundle\Admin\FileAdmin
File Management with Doctrine
File entity (or extend it) to store files in the database:
// Example entity with file field
/**
* @ORM\Entity
*/
class Document {
/**
* @ORM\ManyToOne(targetEntity="Awaresoft\FileBundle\Entity\File", cascade={"persist"})
*/
private $file;
}
use Awaresoft\FileBundle\Service\FileUploader;
public function uploadFile(FileUploader $uploader, UploadedFile $file) {
$fileEntity = $uploader->upload($file, 'uploads/documents');
return $fileEntity;
}
Sonata Media Integration
# config/packages/sonata_media.yaml
sonata_media:
providers:
file:
service: awaresoft_file.provider.file
formats:
small: { width: 100, quality: 70 }
Custom File Providers
use Awaresoft\FileBundle\Provider\FileProviderInterface;
class S3FileProvider implements FileProviderInterface {
public function upload(File $file, $path) {
// Custom S3 upload logic
}
}
services.yaml:
services:
awaresoft_file.provider.s3:
class: App\Provider\S3FileProvider
tags: ['awaresoft_file.provider']
File Fixtures
use Awaresoft\FileBundle\DataFixtures\FileFixture;
public function load(ObjectManager $manager) {
$fixture = new FileFixture();
$fixture->load($manager, [
'file1.pdf' => __DIR__.'/fixtures/files/file1.pdf',
]);
}
Symlink Dependencies
composer remove awaresoft/file-bundle and update autoload_psr4.php manually.Sonata Version Mismatch
composer.json:
"sonata-project/admin-bundle": "3.*",
"sonata-project/block-bundle": "3.*"
File Permissions
www-data) has access to var/uploads.Database Schema Updates
File entity assumes a specific schema. Custom fields (e.g., mimeType) may require manual migration:
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
Log Upload Errors
var/log/dev.log for file upload failures:
// In config/packages/monolog.yaml
monolog:
handlers:
main:
level: debug
Verify Provider Configuration
php bin/console debug:container awaresoft_file.provider
Clear Cache After Modifications
php bin/console cache:clear
php bin/console debug:config awaresoft_file
Custom File Validators
use Awaresoft\FileBundle\Validator\Constraints\File as FileAssert;
/**
* @Assert\File(
* maxSize="1024k",
* mimeTypes={"image/jpeg", "image/png"}
* )
*/
private $file;
Event Listeners
use Awaresoft\FileBundle\Event\FileUploadEvent;
public function onFileUpload(FileUploadEvent $event) {
$file = $event->getFile();
// Add metadata, e.g., $file->setCustomField('processed', true);
}
services.yaml:
services:
App\EventListener\FileListener:
tags:
- { name: kernel.event_listener, event: awaresoft_file.upload, method: onFileUpload }
Twig Extensions
use Awaresoft\FileBundle\Twig\FileExtension;
// In services.yaml
twig:
extensions:
- Awaresoft\FileBundle\Twig\FileExtension
{{ file.getAbsoluteUrl() }}
Default Upload Path
var/uploads. Override in config/packages/awaresoft_file.yaml:
awaresoft_file:
upload_dir: '%kernel.project_dir%/public/uploads/custom'
Media Contexts
default) must match the provider’s configuration. Add contexts in sonata_media.yaml:
sonata_media:
contexts:
default:
providers:
- sonata.media.provider.file
Backward Compatibility
FileEntity). Instead, extend them:
class CustomFile extends \Awaresoft\FileBundle\Entity\File {
// Add custom fields/methods
}
FileAdmin to use the custom entity:
class CustomFileAdmin extends FileAdmin {
protected $modelClass = CustomFile::class;
}
How can I help you explore Laravel packages today?