Récupération de la liste des contrôleurs d'une application Symfony
Publié le 14/09/2024 • Actualisé le 14/09/2024
Dans ce bout de code, nous voyons comment récupérer les FQCN des contrôleurs d'une application Symfony. On peut utiliser cette très pratique fonction getAliases()
sur l'objet de collection de routes, au lieu de boucler. Cela retourne tous les couples de contrôleurs et d'actions existants, mais quand on utilise strictement le pattern ADR, cela retourne bien la liste des contrôleurs. Il faut, dans ce cas, supprimer le suffixe '::__invoke
de chaque entrée. Vous pouvez accéder au lien « Plus sur le web » ci-dessous pour avoir un exemple d'utilisation dans le code du projet MicroSymfony.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
use App\Controller\BlogController;
use function Symfony\Component\String\u;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet318Trait
{
public function snippet318(): void
{
$controllers = array_unique(array_map(
static fn ($value) => u($value)->trimSuffix('::__invoke')->toString(),
array_keys($this->router->getRouteCollection()->getAliases())
));
// filter on a restricted set
$controllers = array_filter($controllers, static fn ($value) => u($value)->startsWith(BlogController::class));
var_dump($controllers);
// That's it! 😁
}
}
Exécuter le snippet Plus sur Stackoverflow Lire la doc Plus sur le web Snippet aléatoire