Installation:
composer require cwd/media-bundle
Add to AppKernel.php (Symfony 2.x) or config/bundles.php (Symfony 3.x/4.x):
new Cwd\MediaBundle\CwdMediaBundle(),
Configuration:
Override default settings in config/packages/cwd_media.yaml (Symfony 4.x+) or app/config/config.yml:
cwd_media:
upload_dir: '%kernel.project_dir%/public/uploads'
allowed_types: ['image/jpeg', 'image/png']
First Use Case:
Cwd\MediaBundle\Form\Type\MediaType:
use Cwd\MediaBundle\Form\Type\MediaType;
$builder->add('media', MediaType::class);
$media = $form->get('media')->getData();
$file = $media->getFile(); // Uploaded file object
File Upload Handling:
Cwd\MediaBundle\Service\MediaService to process files:
$mediaService = $this->get('cwd_media.media_service');
$media = $mediaService->upload($file, 'user_avatars');
path, mime_type) in your entity.Entity Mapping:
Cwd\MediaBundle\Entity\Media or embed fields in your own entity:
/**
* @ORM\Embedded(class="Cwd\MediaBundle\Entity\Media")
*/
private $media;
Twig Integration:
media_path() helper to generate URLs:
<img src="{{ media_path(media) }}" alt="{{ media.name }}">
Batch Processing:
MediaType collections in forms:
$builder->add('gallery', CollectionType::class, [
'entry_type' => MediaType::class,
'allow_add' => true,
'allow_delete' => true,
]);
Deprecated Symfony 2.x:
symfony/flex recipes or vendor patches for newer Symfony.No Database Abstraction:
Media entity fields.Hardcoded Upload Logic:
upload_dir is global. Override via config or extend MediaService:
class CustomMediaService extends MediaService {
protected function getUploadDir() { return $this->container->getParameter('custom.upload_dir'); }
}
File Permissions:
Ensure upload_dir is writable by PHP (chmod -R 775 uploads/).
Validation Errors:
Check allowed_types in config. Extend via:
cwd_media:
allowed_types: ['image/*', 'application/pdf']
Custom Storage:
Override MediaService::upload() to use S3/AWS:
public function upload(File $file, $dir) {
$s3 = $this->get('aws_s3.client');
// Custom logic...
}
Event Listeners:
Hook into cwd_media.upload.post event to process files post-upload:
$dispatcher->addListener('cwd_media.upload.post', function($event) {
$media = $event->getMedia();
// Resize, optimize, etc.
});
Twig Filters:
Extend media_path() with custom logic:
{{ media_path(media, {'width': 200}) }} {# Custom filter #}
How can I help you explore Laravel packages today?