---
title: 'EasyAdmin 5.0 : ce qui change (4.28, 4.29) et comment migrer depuis la 4.x'
description: "Les nouveautés des versions 4.28 et 4.29, ce que la 5.0 retire réellement, les exigences de compatibilité et la procédure de migration d'EasyAdmin 4 vers 5, étape par étape."
pubDate: 2026-02-23
updatedDate: 2026-09-27
family: 'php-symfony'
tags: []
heroImage: '/images/easyadminbundle-decouverte-des-nouveautes-v4-28-v-4-29-et-v5-0.webp'
videoUrl: 'https://youtu.be/_Gn-hl_wXek'
faq:
  - question: "Comment migrer d'EasyAdmin 4 vers EasyAdmin 5 ?"
    answer: "En trois temps. D'abord, supprime toute dépréciation de la branche 4.x : exécute tes tests avec les dépréciations traitées comme des erreurs, sinon tu ne sauras pas ce qui casse à cause de la 5.0. Ensuite, mets à jour la contrainte : composer require easycorp/easyadmin-bundle:^5.0. Enfin, vérifie les points listés dans UPGRADE.md à la racine du dépôt — il n'existe pas de fichier UPGRADE-5.0.md séparé, et aucune commande de console ne réalise la migration."
  - question: 'EasyAdmin 5.0 apporte-t-il de nouvelles fonctionnalités ?'
    answer: "Non, et la release officielle le dit explicitement : la 5.0 contient exactement les mêmes fonctionnalités que la dernière 4.x, à une différence près — tout le code déprécié a été retiré, donc l'application tourne un peu plus vite. Les nouvelles fonctionnalités seront développées uniquement sur la branche 5.x à partir de maintenant."
  - question: 'EasyAdmin 5 exige quelle version de PHP et de Symfony ?'
    answer: "PHP 8.2 ou supérieur, et Symfony 6.4.33 ou supérieur (6.4, 7.x ou 8.x). La branche 4.x acceptait encore PHP 8.1 et Symfony 5.4 : si ton application est en PHP 8.1 ou sur Symfony 5.4, il faut d'abord monter l'application avant de monter EasyAdmin."
  - question: 'EasyAdmin 5 casse quoi concrètement ?'
    answer: "Les deprecations de la 4.x, une par une : les URLs avec query string (?crudAction=…&crudControllerFqcn=…) ne sont plus supportées, la variable Twig ea est remplacée par la fonction ea(), MenuItem::linkToCrud() laisse place à MenuItem::linkTo(), l'attribut #[AdminRoute] devient obligatoire sur les actions personnalisées, displayAsLink() devient renderAsLink(), FormField::addPanel() devient addFieldset(), et les paramètres referrer disparaissent. La route du tableau de bord doit être déclarée avec #[AdminDashboard]."
  - question: 'Je suis en EasyAdmin 2 ou 3, je peux passer directement en 5 ?'
    answer: "Non. La documentation officielle demande de migrer d'abord vers EasyAdmin 4, puis de passer en 5.0. Chaque saut de version majeure a ses propres ruptures, et les mélanger rend le débogage beaucoup plus difficile."
---

EasyAdminBundle est l'un des bundles d'administration les plus utilisés de l'écosystème Symfony. Trois
versions se sont enchaînées en 2026 : la 4.28, la 4.29 et la 5.0 — cette dernière sortie le 26 février
2026, suivie depuis par les mineures 5.x (la 5.6.0 date du 17 septembre 2026). Voici ce qui a réellement
changé, et comment passer de la 4.x à la 5.x sans y laisser une soirée.

## Ce qui arrive dans les versions 4.28 et 4.29

Les deux mineures précédant la 5.0 sont bien plus riches qu'un simple lot de correctifs.

**EasyAdmin 4.28.0** (28 janvier 2026) apporte le support des
[nonces Content Security Policy](https://github.com/EasyCorp/EasyAdminBundle/releases/tag/v4.28.0), ce
qui permet enfin de servir l'interface sans `unsafe-inline` dans ta politique CSP. S'y ajoutent des
filtres prêts à l'emploi pour les pays, les devises, les langues, les locales et les fuseaux horaires ;
une demande de confirmation avant l'exécution d'une action ; les « choix préférés » dans `ChoiceField` et
`AssociationField` ; une action par défaut déclenchable au clic sur une ligne de la grille ; et la
personnalisation du contenu et du formatage des entrées d'autocomplétion.

**EasyAdmin 4.29.0** (14 février 2026) introduit un `AdminControllerRegistry` et un nouveau type d'élément
de menu qui pointe vers n'importe quel contrôleur, sur lequel repose `MenuItem::linkTo()`
([release](https://github.com/EasyCorp/EasyAdminBundle/releases/tag/v4.29.0)). Côté correctifs : le
filtrage sur les propriétés embarquées, la recherche dans des propriétés embarquées imbriquées et le
`CrudAutocompleteSubscriber` avec un ULID non natif Doctrine.

C'est aussi dans cette branche qu'arrive la dépréciation qui piégera le plus de monde : à partir de la
4.29.5, déclarer une action CRUD personnalisée sans l'attribut `#[AdminRoute]` est déprécié — et en 5.x,
ces actions sont purement et simplement ignorées.

## EasyAdmin 5.0 : une rupture sans nouveauté

La release est
[explicite](https://github.com/EasyCorp/EasyAdminBundle/releases/tag/v5.0.0) : « EasyAdmin 5.0 includes
the exact same features as the latest 4.x version. The only difference is that EasyAdmin 5.0 removes all
deprecated features, so your application will run a bit faster. »

Autrement dit : aucune fonctionnalité en plus. C'est un nettoyage, pas une refonte. Les nouveautés
arriveront désormais uniquement en 5.x, et la branche 4.x ne recevra plus que des corrections de bugs —
la 4.29.16 date du 11 août 2026, et aucune date de fin de support n'est annoncée.

Les exigences changent en revanche :

- **4.x** : PHP 8.1 minimum, Symfony 5.4 à 8.x
  ([composer.json](https://raw.githubusercontent.com/EasyCorp/EasyAdminBundle/v4.29.0/composer.json))
- **5.0** : PHP 8.2 minimum, Symfony 6.4.33 minimum, 7.x ou 8.x
  ([composer.json](https://raw.githubusercontent.com/EasyCorp/EasyAdminBundle/v5.0.0/composer.json))

La [documentation officielle](https://symfony.com/bundles/EasyAdminBundle/current/index.html) résume :
PHP 8.2+, Symfony 6.4+, et des entités Doctrine ORM uniquement — Doctrine ODM n'est pas supporté.

## Migrer de la 4.x vers la 5.0 dans le bon ordre

Le guide de migration, c'est le fichier `UPGRADE.md` à la racine du
[dépôt](https://github.com/EasyCorp/EasyAdminBundle/blob/5.x/UPGRADE.md). Il n'existe **pas** de
`UPGRADE-5.0.md` séparé, **pas** de `CHANGELOG.md`, et **aucune** commande de console ne fait la
migration à ta place. Tout se joue avant :

```bash
# 1. traiter les dépréciations de la 4.x jusqu'à n'en avoir plus aucune
php bin/phpunit   # avec les dépréciations en erreurs, ou via le profiler

# 2. mettre à jour la contrainte
composer require easycorp/easyadmin-bundle:^5.0
```

Si tu es en EasyAdmin 2 ou 3, la documentation demande de migrer d'abord vers la 4, puis vers la 5 :
mélanger deux sauts de version majeure rend le débogage beaucoup plus difficile.

## Ce qui casse, en pratique

La liste complète est dans `UPGRADE.md`. Les points qui touchent la plupart des projets :

**Les URLs « pretty » deviennent obligatoires.** Les anciennes URLs en query string
(`?crudAction=…&crudControllerFqcn=…`) ne sont plus supportées : elles reposaient sur un route loader
personnalisé. Avec Symfony Flex le fichier est créé automatiquement, sinon il faut ajouter
`config/routes/easyadmin.yaml` avec `resource: .` et `type: easyadmin.routes`.

**La variable Twig `ea` devient une fonction.** `{{ ea.i18n.translationDomain }}` s'écrit maintenant
`{{ ea().i18n.translationDomain }}`.

**Le menu et les actions se renomment :**

```php
// avant (4.x)
MenuItem::linkToCrud('Categories', 'fa fa-tags', CategoryCrudController::class);
$action->displayAsLink();

// après (5.x)
MenuItem::linkTo(CategoryCrudController::class, 'Categories', 'fa fa-tags');
$action->renderAsLink();
```

`displayAsButton()` devient `renderAsButton()`, `displayAsForm()` devient `renderAsForm()`,
`FormField::addPanel()` devient `FormField::addFieldset()` — les « form panels » s'appellent désormais
« form fieldsets ». Les attributs `#[AdminCrud]` et `#[AdminAction]` disparaissent au profit de
`#[AdminRoute]`, désormais **obligatoire** sur les actions personnalisées.

**Les referrers disparaissent des URLs** : le paramètre `referrer` n'existe plus,
`AdminContext::getReferrer()` et `BatchActionDto::$referrerUrl` sont supprimés. Passe par l'en-tête
`referer` de la requête si tu en avais besoin.

**La route du tableau de bord doit utiliser l'attribut `#[AdminDashboard]`.** La
[documentation](https://github.com/EasyCorp/EasyAdminBundle/blob/5.x/doc/dashboards.rst) est catégorique :
aucune autre façon de déclarer une route (y compris `#[Route]`) ne fonctionne.

**Pour l'analyse statique**, PHPStan réclame le type d'entité sur les contrôleurs :

```php
/** @extends AbstractCrudController<User> */
class UserCrudController extends AbstractCrudController
```

## Et après la 5.0

Les mineures 5.x apportent, elles, de vrais changements :

- **5.2** : nouveau balisage du commutateur booléen (`<twig:ea:Switch>` avec les classes `.ea-switch`), et le composant drapeau entoure désormais l'image d'un `<span class="country-flag-wrapper">`. Si tu avais surchargé ces templates, ils sont à reprendre.
- **5.3** : passage des styles en [CSS cascade layers](https://developer.mozilla.org/fr/docs/Learn_web_development/Core/Styling_basics/Cascade_layers) (`vendor`, `ea`, `ea-overrides`). Tes styles personnalisés non « layerisés » gagnent maintenant sur ceux du backend — pratique pour surcharger, mais l'ordre change.
- **5.3.1** : suppression de l'entrée de cache `easyadmin.crud.entity_fqcn_to_controller_fqcn`.
- **5.4** : les macros Twig de la page de détail sont extraites dans des templates individuels sous `@EasyAdmin/crud/detail/`, que tu peux surcharger un par un.

Sur un projet qui sort de la 4.x, tu remarques surtout la taille du fichier `UPGRADE.md` : la 5.0 est
l'exception agréable dans l'histoire des versions majeures de Symfony — une montée de version où le
travail consiste à nettoyer, pas à réécrire. Pour t'y retrouver dans les évolutions récentes du
framework lui-même, j'ai aussi détaillé
[les nouveautés de Symfony 7.3](/blog/5-nouveautes-incroyables-de-symfony-7-3/).

Retrouve la démonstration complète et les exemples de code dans la vidéo.

## Questions fréquentes

**Comment migrer d'EasyAdmin 4 vers EasyAdmin 5 ?**

En trois temps. D'abord, supprime toute dépréciation de la branche 4.x : exécute tes tests avec les dépréciations traitées comme des erreurs, sinon tu ne sauras pas ce qui casse à cause de la 5.0. Ensuite, mets à jour la contrainte : composer require easycorp/easyadmin-bundle:^5.0. Enfin, vérifie les points listés dans UPGRADE.md à la racine du dépôt — il n'existe pas de fichier UPGRADE-5.0.md séparé, et aucune commande de console ne réalise la migration.

**EasyAdmin 5.0 apporte-t-il de nouvelles fonctionnalités ?**

Non, et la release officielle le dit explicitement : la 5.0 contient exactement les mêmes fonctionnalités que la dernière 4.x, à une différence près — tout le code déprécié a été retiré, donc l'application tourne un peu plus vite. Les nouvelles fonctionnalités seront développées uniquement sur la branche 5.x à partir de maintenant.

**EasyAdmin 5 exige quelle version de PHP et de Symfony ?**

PHP 8.2 ou supérieur, et Symfony 6.4.33 ou supérieur (6.4, 7.x ou 8.x). La branche 4.x acceptait encore PHP 8.1 et Symfony 5.4 : si ton application est en PHP 8.1 ou sur Symfony 5.4, il faut d'abord monter l'application avant de monter EasyAdmin.

**EasyAdmin 5 casse quoi concrètement ?**

Les deprecations de la 4.x, une par une : les URLs avec query string (?crudAction=…&crudControllerFqcn=…) ne sont plus supportées, la variable Twig ea est remplacée par la fonction ea(), MenuItem::linkToCrud() laisse place à MenuItem::linkTo(), l'attribut #[AdminRoute] devient obligatoire sur les actions personnalisées, displayAsLink() devient renderAsLink(), FormField::addPanel() devient addFieldset(), et les paramètres referrer disparaissent. La route du tableau de bord doit être déclarée avec #[AdminDashboard].

**Je suis en EasyAdmin 2 ou 3, je peux passer directement en 5 ?**

Non. La documentation officielle demande de migrer d'abord vers EasyAdmin 4, puis de passer en 5.0. Chaque saut de version majeure a ses propres ruptures, et les mélanger rend le débogage beaucoup plus difficile.
