# AbstractCrudController

L'AbstractCrudController (src/Controller/AbstractCrudController.php) est un composant central de l'application.

C'est une classe abstraite, dont héritent tous les Controllers de l'application, et qui contient la majorité de la logique de ces Controllers.

Les controllers n'ont plus qu'à définir quelques valeurs en surchargeant certaines méthodes, et l'AbstractCrudController se charge du reste.

# Spécifications du Controller

# setEntityClassName

Cette méthode permet de déclarer l'Entity que le Controller va gérer.

Cette Entity est ensuite utilisée pour déduire notamment le Repository dont le Controller aura besoin.

# getFilters

getFilters permet à un Controller d'activer certains des filtres sur ses routes.

La présence d'un filtre dans le tableau retourné par getFilters() n'implique pas que le filtre va être utilisé : il permet en tout cas son utilisation au travers des filtres imposés, par défaut, ou donnés directement par l'utilisateur.

Pour en savoir plus, se référer au Système de filtres.

# setFormType (optionelle)

Une des méthodes potentiellement surchargée s'appelle setFormType.

Elle permet de déclarer, au niveau du Controller, la classe de Type (formulaire) à utiliser pour ses routes.

Cette classe est surchargeable au niveau d'une action, en utilisant $this->formTypeClassName = MyType::class;.

# Méthodes disponibles

Une fois ces méthodes surchargées, le Controller peut appeler plusieurs méthodes de l'AbstractCrudController afin de gérer ses requêtes.

L'intérêt de ces méthodes est multiple :

  • Éviter les copier-coller dans le corps des méthodes des Controllers ;
  • "Enlever le gras" des Controllers : il ne reste dans les Controller que la logique spécifique à ce Controller : appel au service de mailing, au manager des établissements afin d'en désactiver un, au service de paiement afin de générer un lien, etc...

# listing

La méthode listing permet de renvoyer un tableau de données correspondant à la requête envoyée et la configuration actuelle du Controller.

# show

La méthode show permet de renvoyer une entité correspondant à la requête envoyée et à la configuration actuelle du Controller.

# new

La méthode new permet de créer une entité et de la sauvegarder en base de données, en se basant sur le formType configuré. Bien entendu, cette méthode valide les données reçues, les mappe sur l'entité fournie par setEntityClassName, etc...

# edit

De même, la méthode edit permet de modifier une entité existante, en se basant sur le formType et l'entityClassName.

# delete

La méthode delete supprime une entité existante, en se basant sur la configuration du Controller.

# Autres méthodes

L'AbstractCrudController, en son coeur, fait appel à d'autres méthodes afin de gérer les requête.

Ces méthodes sont appelables directement par le Controller afin de récupérer des "bouts" d'exécution de l'AbstractCrudController sans en utiliser la méthode complète.

Par exemple, si je souhaite gérer un formulaire, et exécuter des actions avant de sauvegarder l'entité liée à ce formulaire, je peux appeler directement $myEntity = $this->handleFormRequest($request); dans le corps de mon Controller : la logique de création du formulaire, validation du formulaire, et retour de l'entité mappée sera exécutée, sans pour autant invoquer la sauvegarde de l'entité.

Quelques exemples existent dans le code !