Récupération de la liste des contrôleurs d'une application Symfony

Publié le 14/09/2024 • Actualisé le 14/09/2024


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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

  Travaillez avec moi !