---
title: 'Back-office Symfony : créer une interface d’administration avec EasyAdmin'
description: "Installation d'EasyAdminBundle, génération du dashboard et des CRUD, personnalisation des champs et protection par le firewall : le guide pas à pas d'un back-office Symfony."
pubDate: 2025-10-10
updatedDate: 2026-10-04
family: 'php-symfony'
tags: []
heroImage: /images/symfony-7-creer-une-interface-dadministration-avec-easyadmin-4.webp
videoUrl: 'https://youtu.be/0MVtFVcEd_8'
faq:
  - question: "Quelle version d'EasyAdminBundle installer aujourd'hui ?"
    answer: 'La branche 5.x, qui est la version stable : la v5.6.1 est sortie le 30 septembre 2026. Elle demande PHP 8.2 au minimum et Symfony 6.4 ou supérieur. La branche 4.x ne reçoit plus que des correctifs.'
  - question: "EasyAdmin gère-t-il l'authentification du back-office ?"
    answer: "Non. EasyAdmin s'appuie entièrement sur le composant Security de Symfony : tu crées tes utilisateurs et tes rôles, puis tu restreins l'URL du back-office avec une règle access_control."
  - question: 'EasyAdmin fonctionne-t-il avec Doctrine ODM ou MongoDB ?'
    answer: "Non : seule l'ORM Doctrine est supportée, quelle que soit la version d'EasyAdmin."
  - question: 'Comment personnaliser les champs affichés par un CRUD ?'
    answer: 'En implémentant configureFields(string $pageName) dans le contrôleur CRUD : tu y retournes des noms de propriétés, des Field::new() ou des champs typés comme TextField, MoneyField ou DateTimeField.'
---

EasyAdminBundle génère un back-office complet pour une application Symfony : liste, détail, création et édition pour chacune de tes entités Doctrine, avec recherche, tri, filtres et pagination fournis. Ce guide reprend la mise en place pas à pas, de l'installation à la protection du back-office.

La vidéo en bas de page a été enregistrée sur EasyAdmin 4 : les commandes et les classes montrées n'ont pas changé depuis, mais le choix de version mérite une mise au point.

## Quelle version d'EasyAdmin choisir ?

EasyAdmin est activement maintenu, mais les branches n'ont pas le même statut. La branche 5.x est la version stable : la dernière release publiée est la v5.6.1, datée du 30 septembre 2026, et elle demande PHP 8.2 au minimum pour Symfony 6.4 ou supérieur. La branche 4.x ne reçoit plus que des correctifs : PHP 8.1 et Symfony 5.4 y restent acceptés, mais aucune fonctionnalité nouvelle n'y arrivera.

Sur un projet neuf, pars donc sur la 5.x. Si tu es déjà en 4.x, la marche à suivre est documentée dans [EasyAdmin 5.0 : ce qui change et comment migrer](/blog/easyadminbundle-decouverte-des-nouveautes-v4-28-v-4-29-et-v5-0/).

## Installer EasyAdminBundle

L'installation tient en une commande :

```
composer require easycorp/easyadmin-bundle
```

Avec Symfony Flex, le recipe enregistre le bundle et il n'y a rien d'autre à déclarer. Sans Flex, il faut ajouter EasyAdminBundle et `Symfony\UX\TwigComponent\TwigComponentBundle` à `config/bundles.php` : EasyAdmin construit son interface avec des Twig Components.

Un prérequis à ne pas oublier : EasyAdmin ne travaille qu'avec des entités Doctrine **ORM**. Doctrine ODM, donc MongoDB ou PHPCR, n'est pas supporté.

## Créer le dashboard

Le dashboard est le point d'entrée du back-office. Le générateur s'en charge :

```
php bin/console make:admin:dashboard
```

Le contrôleur produit étend `AbstractDashboardController` et porte l'attribut qui fixe l'URL et le nom de la route :

```
#[AdminDashboard(routePath: '/admin', routeName: 'admin')]
```

Visite ensuite `/admin` : la page d'accueil par défaut s'affiche, avec un menu vide. C'est ce fichier que tu complètes pour ajouter tes entrées de menu et tes widgets, en PHP et sans YAML.

## Générer un CRUD

Un contrôleur CRUD pilote les quatre écrans d'une entité : `index`, `detail`, `new` et `edit`. Le générateur écrit le squelette :

```
php bin/console make:admin:crud
```

Deux méthodes comptent dans le fichier obtenu. `getEntityFqcn()` retourne la classe de l'entité gérée. `configureFields()` décrit les champs affichés, et tu as le choix de la précision : un simple nom de propriété, un `Field::new()`, ou un champ typé comme `TextField`, `MoneyField` ou `DateTimeField`.

Les routes sont créées par un loader dédié, sous la forme `admin_<entité>_index`, `_new`, `_edit` et `_detail`. Tu n'écris donc aucune route à la main.

## Sécuriser le back-office

EasyAdmin ne gère pas l'authentification : il s'appuie entièrement sur le composant Security de Symfony. Tu déclares tes utilisateurs et tes rôles comme d'habitude, puis tu restreins l'accès dans `config/packages/security.yaml` :

```
access_control:
  - { path: ^/admin, roles: ROLE_ADMIN }
```

Sans cette règle, ton back-office est ouvert à quiconque connaît l'URL. Pour des permissions plus fines, où un auteur ne modifie que ses propres fiches, ce sont les [voters de Symfony](/blog/gestion-des-permissions-utilisateurs-avec-les-voters-de-symfony/) qui prennent le relais.

## Et après ?

Deux extensions reviennent vite une fois le CRUD en place : l'upload de fichiers, qui passe par un champ dédié plutôt qu'un champ texte, et la personnalisation des actions disponibles par entité. Pour le premier, [uploader plusieurs fichiers avec EasyAdmin 4 et VichUploaderBundle](/blog/upload-plusieurs-fichiers-avec-symfony-easyadmin-4-et-vichuploaderbundle/) détaille la configuration du champ.

La [documentation officielle d'EasyAdminBundle](https://symfony.com/bundles/EasyAdminBundle/5.x/index.html) est publiée par version et reste la référence à jour, en complément de la [démonstration vidéo](https://youtu.be/0MVtFVcEd_8).

## Questions fréquentes

**Quelle version d'EasyAdminBundle installer aujourd'hui ?**

La branche 5.x, qui est la version stable : la v5.6.1 est sortie le 30 septembre 2026. Elle demande PHP 8.2 au minimum et Symfony 6.4 ou supérieur. La branche 4.x ne reçoit plus que des correctifs.

**EasyAdmin gère-t-il l'authentification du back-office ?**

Non. EasyAdmin s'appuie entièrement sur le composant Security de Symfony : tu crées tes utilisateurs et tes rôles, puis tu restreins l'URL du back-office avec une règle access_control.

**EasyAdmin fonctionne-t-il avec Doctrine ODM ou MongoDB ?**

Non : seule l'ORM Doctrine est supportée, quelle que soit la version d'EasyAdmin.

**Comment personnaliser les champs affichés par un CRUD ?**

En implémentant configureFields(string $pageName) dans le contrôleur CRUD : tu y retournes des noms de propriétés, des Field::new() ou des champs typés comme TextField, MoneyField ou DateTimeField.
