Aller au contenu principal

EasyAdmin - Introduction

La commande make:crud, bien qu'elle puisse être utile de temps à autre, est vite limitée.

On peut également installer un Bundle d'administration complète : Le EasyAdminBundle. Ensuite, nous allons le configurer un peu pour pouvoir générer un CRUD automatique sur nos articles. L'apparence de ce CRUD n'aura rien à voir avec la commande make:crud :

EasyAdmin

Installation​

Toujours avec Composer :

composer require easycorp/easyadmin-bundle
Alias Symfony Flex

On peut aussi utiliser les alias Symfony Flex :

composer require admin-gen
composer require admin-generator
composer require admin

Le Dashboard​

Une fois le package installé, il faut créer un tableau de bord :

php bin/console make:admin:dashboard

On peut ensuite redémarrer le serveur et se rendre sur /admin, où on trouvera une page d'accueil par défaut.

Dans le code, la commande du Maker a créé un DashboardController. C'est dans ce fichier qu'on pourra configurer le point d'entrée de notre interface d'administration.

Un CRUD automatique​

Si on souhaite configurer, par exemple, le fait qu'à l'arrivée sur l'administration on veut afficher une liste de tous nos articles, il faut d'abord générer un CRUD pour les articles :

php bin/console make:admin:crud

On choisit l'entité Article, puis le Maker nous guide dans la création du CRUD. La commande nous crée une classe très légère, quasiment vide. En effet, elle hérite d'un AbstractCrudController fourni par EasyAdmin, incluant déjà de nombreuses fonctionnalités.

On peut déjà en préparer un autre pour les catégories, avec la même commande.

La page d'accueil​

Pour configurer le fait qu'on souhaite aller sur le CRUD article dès la page d'accueil, on va retourner dans le dashboard, pour modifier le contrôleur index (l'annotation de Route au-dessus nous indique que c'est le contrôleur qui est derrière l'URL /admin) :

#[Route('/admin', name: 'admin')]
public function index(): Response
{
//return parent::index();

// Option 1. You can make your dashboard redirect to some common page of your backend
//
$adminUrlGenerator = $this->container->get(AdminUrlGenerator::class);
return $this->redirect($adminUrlGenerator->setController(ArticleCrudController::class)->generateUrl());

//...
}

À l'arrivée sur l'administration, on redirigera automatiquement vers la liste des articles.

Lien automatique avec les catégories​

Dans la classe ArticleCrudController, on va configurer les différents champs qu'on peut trouver dans un formulaire d'article :

public function configureFields(string $pageName): iterable
{
return [
IdField::new('id'),
TextField::new('title'),
BooleanField::new('visible'),
AssociationField::new('category')->autocomplete(),
];
}
remarque

Le but de la méthode autocomplete est de générer une liste déroulante dans laquelle on peut commencer à taper du texte et avoir des suggestions d'autocomplétion automtisées.

Pouvoir afficher la catégorie reliée​

Il est possible qu'un message d'erreur apparaisse, indiquant quelque chose comme Could not convert App\Entity\Category to string.

Dans ce cas, il suffit de fournir à PHP une manière de représenter une catégorie sous forme de chaîne de caractères : par son nom.

Pour ce faire, on va implémenter une méthode magique de PHP : __toString(), dans Category :

class Category
{
//...
public function __toString()
{
return $this->name;
}
//...
}

C'est elle qui permettra à EasyAdmin d'afficher le nom de la catégorie dans une liste d'articles et dans la liste déroulante d'un formulaire d'article.

Méthode magique

__toString(), tout comme __construct(), est une méthode magique. Elle est automatiquement lancée quand on essaye de echo un objet.

Finalement, avec assez peu d'efforts, on arrive rapidement à une administration assez riche et agréable à naviguer. Dans le formulaire d'article, on retrouve une liste déroulante des catégories avec autocomplétion.