« Symfony Docker » : différence entre les versions
Page créée avec « == Symfony cache et composer cache avec Docker : == ----- === '''1. Rôle du dossier <code>/var/cache</code> dans Symfony''' === Symfony utilise ce dossier pour : - '''Le cache applicatif''' (ex : compilation des templates Twig, cache des routes, annotations) - '''Le cache système''' (ex : fichiers de configuration compilés comme <code>srcApp_KernelDevDebugContainer.php</code>) '''Problème avec Docker :'''<br /> Par défaut, ce cache est régénéré à c... » |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
== composer dump-autoload == | |||
La commande '''<code>composer dump-autoload</code>''' est une commande essentielle dans l’écosystème PHP/Composer. Elle régénère le fichier d’'''autoloading''' (chargement automatique des classes) sans réinstaller les dépendances. Voici ce qu’elle fait en détail : | |||
----- | |||
=== '''À quoi sert <code>composer dump-autoload</code> ?''' === | |||
<ol style="list-style-type: decimal;"> | |||
<li>'''Reconstruit l’autoloader de Composer''' | |||
<ul> | |||
<li>Met à jour le fichier <code>vendor/autoload.php</code> qui gère le chargement automatique des classes PHP.</li> | |||
<li>Utile quand vous ajoutez/modifiez des classes '''sans passer par <code>composer install/update</code>'''.</li></ul> | |||
</li> | |||
<li>'''Optimise les performances (si utilisé avec <code>-o</code>)''' | |||
<ul> | |||
<li><p>Avec l’option <code>--optimize</code> (<code>-o</code>), Composer génère une '''version optimisée''' de l’autoloader (classe map statique), ce qui accélère le chargement des classes en production :</p> | |||
<syntaxhighlight lang="bash">composer dump-autoload --optimize</syntaxhighlight></li></ul> | |||
</li> | |||
<li>'''Prend en compte les classes dans <code>autoload</code> ou <code>autoload-dev</code>''' | |||
<ul> | |||
<li><p>Si vous avez des classes définies dans <code>composer.json</code> sous :</p> | |||
<syntaxhighlight lang="json">"autoload": { | |||
"psr-4": { "MonApp\\": "src/" } | |||
}</syntaxhighlight></li> | |||
<li><p>La commande les intègre dans l’autoloader.</p></li></ul> | |||
</li></ol> | |||
----- | |||
=== '''Quand l’utiliser ?''' === | |||
{| class="wikitable" | |||
|- | |||
! Cas d’usage | |||
! Commande recommandée | |||
|- | |||
| Après avoir '''ajouté une nouvelle classe''' manuellement (sans Composer). | |||
| <code>composer dump-autoload</code> | |||
|- | |||
| En '''production''' pour optimiser les performances. | |||
| <code>composer dump-autoload --optimize</code> | |||
|- | |||
| Après avoir '''modifié <code>composer.json</code>''' (sans vouloir réinstaller les dépendances). | |||
| <code>composer dump-autoload</code> | |||
|- | |||
| Pour '''vérifier les espaces de noms (PSR-4)'''. | |||
| <code>composer dump-autoload</code> | |||
|} | |||
----- | |||
=== '''Différence avec <code>composer install</code> et <code>composer update</code>''' === | |||
* '''<code>composer install</code>''' :<br /> | |||
Installe les dépendances '''ET''' régénère l’autoloader.<br /> | |||
* '''<code>composer update</code>''' :<br /> | |||
Met à jour les dépendances '''ET''' régénère l’autoloader.<br /> | |||
* '''<code>composer dump-autoload</code>''' :<br /> | |||
'''Ne touche pas aux dépendances''' – ne fait que mettre à jour l’autoloader. | |||
----- | |||
=== '''Exemple concret dans un projet Symfony''' === | |||
<ol style="list-style-type: decimal;"> | |||
<li>'''Vous ajoutez une nouvelle entité <code>src/Entity/Product.php</code>''' : | |||
<ul> | |||
<li><p>Symfony utilise l’autoloading PSR-4, donc la classe sera automatiquement détectée.<br /> | |||
</p></li> | |||
<li><p>Si elle n’est pas reconnue, exécutez :</p> | |||
<syntaxhighlight lang="bash">composer dump-autoload</syntaxhighlight></li></ul> | |||
</li> | |||
<li>'''Vous développez un bundle local''' (lié via <code>"type": "path"</code> dans <code>composer.json</code>) : | |||
<ul> | |||
<li><p>Après avoir modifié le bundle, pour que Symfony reconnaisse les nouvelles classes :</p> | |||
<syntaxhighlight lang="bash">composer dump-autoload</syntaxhighlight></li></ul> | |||
</li></ol> | |||
----- | |||
=== '''Bonnes pratiques''' === | |||
<ul> | |||
<li><p>'''En développement''' :<br /> | |||
Utilisez <code>composer dump-autoload</code> après avoir ajouté des classes manuellement.<br /> | |||
</p></li> | |||
<li><p>'''En production''' :<br /> | |||
Utilisez <code>composer dump-autoload --optimize</code> pour des performances optimales.<br /> | |||
</p></li> | |||
<li><p>'''Avec Docker''' :<br /> | |||
Si vous montez un volume (<code>./:/var/www/html</code>), exécutez la commande '''dans le conteneur''' :</p> | |||
<syntaxhighlight lang="bash">docker-compose exec app composer dump-autoload</syntaxhighlight></li></ul> | |||
----- | |||
=== '''Résumé''' === | |||
<code>composer dump-autoload</code> est un outil léger pour '''rafraîchir l’autoloader''' sans toucher aux dépendances. Indispensable pour :<br /> | |||
- Le développement de bundles locaux.<br /> | |||
- L’ajout manuel de classes.<br /> | |||
- L’optimisation en production. | |||
Utilisez-la dès que vous rencontrez des erreurs du type :<br /> | |||
> ''“Class ‘MonApp\Entity\Product’ not found”'' | |||
🚀 '''Astuce''' : Combinez-la avec <code>--optimize</code> en prod pour un boost de performances ! | |||
== Symfony cache et composer cache avec Docker : == | == Symfony cache et composer cache avec Docker : == | ||
Version du 16 juin 2025 à 22:28
composer dump-autoload
La commande composer dump-autoload est une commande essentielle dans l’écosystème PHP/Composer. Elle régénère le fichier d’autoloading (chargement automatique des classes) sans réinstaller les dépendances. Voici ce qu’elle fait en détail :
À quoi sert composer dump-autoload ?
- Reconstruit l’autoloader de Composer
- Met à jour le fichier
vendor/autoload.phpqui gère le chargement automatique des classes PHP. - Utile quand vous ajoutez/modifiez des classes sans passer par
composer install/update.
- Met à jour le fichier
- Optimise les performances (si utilisé avec
-o)Avec l’option
--optimize(-o), Composer génère une version optimisée de l’autoloader (classe map statique), ce qui accélère le chargement des classes en production :composer dump-autoload --optimize
- Prend en compte les classes dans
autoloadouautoload-devSi vous avez des classes définies dans
composer.jsonsous :"autoload": { "psr-4": { "MonApp\\": "src/" } }
La commande les intègre dans l’autoloader.
Quand l’utiliser ?
| Cas d’usage | Commande recommandée |
|---|---|
| Après avoir ajouté une nouvelle classe manuellement (sans Composer). | composer dump-autoload
|
| En production pour optimiser les performances. | composer dump-autoload --optimize
|
Après avoir modifié composer.json (sans vouloir réinstaller les dépendances).
|
composer dump-autoload
|
| Pour vérifier les espaces de noms (PSR-4). | composer dump-autoload
|
Différence avec composer install et composer update
composer install:
Installe les dépendances ET régénère l’autoloader.
composer update:
Met à jour les dépendances ET régénère l’autoloader.
composer dump-autoload:
Ne touche pas aux dépendances – ne fait que mettre à jour l’autoloader.
Exemple concret dans un projet Symfony
- Vous ajoutez une nouvelle entité
src/Entity/Product.php:Symfony utilise l’autoloading PSR-4, donc la classe sera automatiquement détectée.
Si elle n’est pas reconnue, exécutez :
composer dump-autoload
- Vous développez un bundle local (lié via
"type": "path"danscomposer.json) :Après avoir modifié le bundle, pour que Symfony reconnaisse les nouvelles classes :
composer dump-autoload
Bonnes pratiques
En développement :
Utilisezcomposer dump-autoloadaprès avoir ajouté des classes manuellement.
En production :
Utilisezcomposer dump-autoload --optimizepour des performances optimales.
Avec Docker :
Si vous montez un volume (./:/var/www/html), exécutez la commande dans le conteneur :docker-compose exec app composer dump-autoload
Résumé
composer dump-autoload est un outil léger pour rafraîchir l’autoloader sans toucher aux dépendances. Indispensable pour :
- Le développement de bundles locaux.
- L’ajout manuel de classes.
- L’optimisation en production.
Utilisez-la dès que vous rencontrez des erreurs du type :
> “Class ‘MonApp\Entity\Product’ not found”
🚀 Astuce : Combinez-la avec --optimize en prod pour un boost de performances !
Symfony cache et composer cache avec Docker :
1. Rôle du dossier /var/cache dans Symfony
Symfony utilise ce dossier pour : - Le cache applicatif (ex : compilation des templates Twig, cache des routes, annotations) - Le cache système (ex : fichiers de configuration compilés comme srcApp_KernelDevDebugContainer.php)
Problème avec Docker :
Par défaut, ce cache est régénéré à chaque démarrage du conteneur → ralentissements (surtout en dev).
2. Stratégies pour optimiser le cache avec Docker
A. Monter /var/cache en volume (pour le dev)
# docker-compose.yml
services:
php:
volumes:
- ./var/cache:/var/www/html/var/cache # Monte le cache Symfony
Avantages : - Le cache persiste entre les redémarrages du conteneur. - Meilleures performances en développement.
Inconvénients : - Peut causer des problèmes de permissions (solved avec chmod ou entrypoint.sh).
B. Utiliser un volume Docker nommé (prod + dev)
volumes:
symfony_cache: # Volume dédié pour le cache
services:
php:
volumes:
- symfony_cache:/var/www/html/var/cache
Bonus : Ajoutez un entrypoint.sh pour fixer les permissions :
#!/bin/bash
set -e
# Fixe les permissions du cache
chown -R www-data:www-data /var/www/html/var
exec "$@"
C. Cache warming en production
Dans votre Dockerfile :
FROM composer AS builder
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader
FROM php:8.2-fpm
COPY --from=builder /app /var/www/html
RUN php bin/console cache:warmup # ⚡ Pré-chauffe le cache
3. Gestion des environnements
| Environnement | Recommandation |
|---|---|
| Développement | Volume monté (./var/cache:/...) + chmod
|
| Production | Volume nommé + cache warming dans l’image |
| CI/CD | Cache éphémère (pas de montage) |
4. Exemple complet (docker-compose.yml)
version: '3.8'
volumes:
symfony_cache: # Pour le cache
composer_cache: # Pour Composer
services:
app:
build: .
volumes:
- ./:/var/www/html
- symfony_cache:/var/www/html/var/cache
- composer_cache:/tmp/composer
environment:
APP_ENV: dev
COMPOSER_CACHE_DIR: /tmp/composer
5. Bonnes pratiques
En dev : Montez
var/cachepour éviter de tout recompiler.En prod : Utilisez
cache:warmupdans l’image + volume nommé.Permissions : Résolvez-les via
entrypoint.shoudocker-compose:user: "${UID:-1000}:${GID:-1000}"
Différence avec Composer Cache
Composer (~/.composer)
|
Symfony (/var/cache)
| |
|---|---|---|
| Type | Cache de dépendances | Cache applicatif |
| Montage | Toujours utile | Surtout en dev |
| Prod | Volume nommé recommandé | Warming dans l’image + volume |
Résumé
- Oui, on peut appliquer le même principe de volume monté pour
/var/cache.
- Mais : Symfony a besoin d’une gestion plus active (warming, permissions).
- Optimisez :
- Dev → Volume monté + permissions
- Dev → Volume monté + permissions
- Prod → Cache warming + volumes nommés
Cela garantit des performances optimales dans tous les cas ! 🚀