Ce guide vous accompagne dans l'installation et la configuration initiale du bundle.
Avant de commencer, assurez-vous que votre environnement répond aux exigences suivantes :
# Extensions obligatoires
php -m | grep -E "(gd|fileinfo|zip|json|mbstring)"
# Extensions recommandées
php -m | grep -E "(imagick|intl|opcache)"
# Vérifier la version de PHP
php -v
# Vérifier la version de Symfony
php bin/console --version
# Vérifier les extensions
php -m
composer require dahovitech/media-bundle
Si vous utilisez Symfony Flex, les bundles de dépendances seront automatiquement configurés. Sinon, passez à l'étape 2.
Si vous n'utilisez pas Symfony Flex, ajoutez les bundles manuellement dans config/bundles.php :
<?php
// config/bundles.php
return [
// ... autres bundles
// Dépendances requises
Vich\UploaderBundle\VichUploaderBundle::class => ['all' => true],
Oneup\FlysystemBundle\OneupFlysystemBundle::class => ['all' => true],
Liip\ImagineBundle\LiipImagineBundle::class => ['all' => true],
ApiPlatform\Symfony\Bundle\ApiPlatformBundle::class => ['all' => true],
// Le bundle principal
DahoviTech\MediaBundle\DahoviTechMediaBundle::class => ['all' => true],
];
Pour l'interface d'administration complète :
# Symfony UX (recommandé)
composer require symfony/ux-turbo symfony/stimulus-bundle
# Ou si vous préférez gérer le frontend manuellement
npm install filepond filepond-plugin-image-preview filepond-plugin-file-validate-type
Créez le fichier config/packages/vich_uploader.yaml :
# config/packages/vich_uploader.yaml
vich_uploader:
db_driver: orm
mappings:
media_files:
uri_prefix: /uploads/media
upload_destination: '%kernel.project_dir%/public/uploads/media'
namer: Vich\UploaderBundle\Naming\UniqidNamer
inject_on_load: false
delete_on_update: true
delete_on_remove: true
Créez le fichier config/packages/liip_imagine.yaml :
# config/packages/liip_imagine.yaml
liip_imagine:
resolvers:
default:
web_path: ~
filter_sets:
cache: ~
# Format thumbnail carré
thumbnail:
quality: 85
filters:
thumbnail: { size: [150, 150], mode: outbound }
# Format medium
medium:
quality: 85
filters:
thumbnail: { size: [400, 400], mode: inset }
# Format large
large:
quality: 90
filters:
thumbnail: { size: [800, 800], mode: inset }
loaders:
default:
filesystem:
data_root:
- '%kernel.project_dir%/public'
Créez le fichier config/packages/oneup_flysystem.yaml :
# config/packages/oneup_flysystem.yaml
oneup_flysystem:
adapters:
local_adapter:
local:
location: '%kernel.project_dir%/public/uploads'
filesystems:
media_filesystem:
adapter: local_adapter
mount: media_filesystem
Si vous voulez personnaliser API Platform, créez config/packages/api_platform.yaml :
# config/packages/api_platform.yaml
api_platform:
title: 'DahoviTech Media API'
version: '1.0.0'
description: 'API de gestion des médias'
formats:
jsonld: ['application/ld+json']
json: ['application/json']
html: ['text/html']
docs_formats:
jsonld: ['application/ld+json']
json: ['application/json']
html: ['text/html']
Créez le fichier config/packages/dahovi_tech_media.yaml :
# config/packages/dahovi_tech_media.yaml
dahovi_tech_media:
# Chemin de stockage local
upload_path: '%kernel.project_dir%/public/uploads/media'
# Taille maximale (10MB)
max_file_size: 10485760
# Extensions autorisées
allowed_extensions:
- 'jpg'
- 'jpeg'
- 'png'
- 'gif'
- 'webp'
- 'pdf'
- 'doc'
- 'docx'
- 'txt'
# Formats d'images
image_formats:
thumbnail:
width: 150
height: 150
mode: crop
medium:
width: 400
height: 400
mode: resize
large:
width: 800
height: 800
mode: resize
# Configuration de stockage
storage:
adapter: local
# Sécurité
security:
generate_secure_filename: true
scan_for_viruses: false
mime_types:
- 'image/jpeg'
- 'image/png'
- 'image/gif'
- 'image/webp'
- 'application/pdf'
- 'text/plain'
- 'application/msword'
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
# CDN (optionnel)
cdn:
enabled: false
url: ''
# API
api:
enabled: true
prefix: '/api/media'
Ajoutez les routes dans config/routes.yaml :
# config/routes.yaml
# API Platform (automatique)
api:
resource: .
type: api_platform
# Routes d'administration
dahovi_tech_media_admin:
resource: '[@DahoviTechMediaBundle](https://github.com/DahoviTechMediaBundle)/Controller/AdminController.php'
type: attribute
prefix: /admin
# Routes API du bundle
dahovi_tech_media_api:
resource: '[@DahoviTechMediaBundle](https://github.com/DahoviTechMediaBundle)/Controller/MediaController.php'
type: attribute
prefix: /api
php bin/console make:migration
php bin/console doctrine:migrations:migrate
php bin/console doctrine:schema:update --force
# Créer les répertoires
mkdir -p public/uploads/media
mkdir -p var/cache/liip_imagine
# Définir les permissions (Linux/macOS)
chmod 755 public/uploads
chmod 755 public/uploads/media
chmod 755 var/cache
# Pour les environnements de production
chown -R www-data:www-data public/uploads
chown -R www-data:www-data var/cache
Ajoutez à votre .gitignore :
# Uploads
/public/uploads/media/*
!/public/uploads/media/.gitkeep
# Cache d'images
/var/cache/liip_imagine/*
php bin/console assets:install
Si vous utilisez Webpack Encore, ajoutez les assets frontend :
# Installation des dépendances
npm install filepond filepond-plugin-image-preview filepond-plugin-file-validate-type
# Dans webpack.config.js
Encore
.addEntry('media-bundle', './assets/media-bundle.js')
.copyFiles({
from: './node_modules/filepond/dist/',
to: 'filepond/[path][name].[ext]'
});
php bin/console debug:router | grep media
Vous devriez voir les routes :
/admin/media - Interface d'administration/api/media - API RESTVisitez http://your-domain/admin/media pour accéder à l'interface d'administration.
curl -X GET http://your-domain/api/media
php bin/console list dahovi-tech
Vous devriez voir les commandes :
dahovi-tech:media:cleanup-expireddahovi-tech:media:generate-thumbnailsdahovi-tech:media:statistics# Ubuntu/Debian
sudo apt-get install php-gd php-zip php-imagick
# CentOS/RHEL
sudo yum install php-gd php-zip php-imagick
# Vérifier les permissions
ls -la public/uploads/
ls -la var/cache/
# Corriger les permissions
sudo chown -R www-data:www-data public/uploads var/cache
sudo chmod -R 755 public/uploads var/cache
# Vider le cache
php bin/console cache:clear
php bin/console liip:imagine:cache:remove
# Régénérer le cache
php bin/console liip:imagine:cache:resolve thumbnail public/uploads/media/sample.jpg
Ajoutez dans config/packages/monolog.yaml :
monolog:
channels: ['dahovi_tech_media']
handlers:
main:
channels: ['!dahovi_tech_media']
media_bundle:
type: stream
path: '%kernel.logs_dir%/media_bundle.log'
level: debug
channels: ['dahovi_tech_media']
# config/packages/dev/dahovi_tech_media.yaml
dahovi_tech_media:
security:
scan_for_viruses: false
api:
cors:
allowed_origins: ['*']
# config/packages/prod/dahovi_tech_media.yaml
dahovi_tech_media:
security:
scan_for_viruses: true
cdn:
enabled: true
url: 'https://cdn.yourdomain.com'
api:
cors:
allowed_origins: ['https://yourdomain.com']
Une fois l'installation terminée :
En cas de problème lors de l'installation :
How can I help you explore Laravel packages today?