Routes par attributs
Ce tutoriel vous montre comment simplifier la création de routes. Vous allez ainsi utiliser le même système que les professionnels du Web qui utilisent Symfony.
-
On commence par rajouter un paquet
composer require symfony/config -
Puis on rajoute une classe
AttributeRouteControllerLoaderdanssrc/Lib:// src/Lib/AttributeRouteControllerLoader.php <?php namespace TheFeed\Lib; use Symfony\Component\Routing\Loader\AttributeClassLoader; use Symfony\Component\Routing\Route; class AttributeRouteControllerLoader extends AttributeClassLoader { /** * Configures the _controller default parameter of a given Route instance. */ protected function configureRoute(Route $route, \ReflectionClass $class, \ReflectionMethod $method, object $annot): void { $route->setDefault('_controller', $class->getName().'::'.$method->getName()); } } -
Enfin, dans
RouteurURL.php, on remplace toute la création des routes danstraiterRequetepar :use Symfony\Component\Config\FileLocator; use Symfony\Component\Routing\Loader\AttributeDirectoryLoader; use TheFeed\Lib\AttributeRouteControllerLoader; $fileLocator = new FileLocator(__DIR__); $attrClassLoader = new AttributeRouteControllerLoader(); $routes = (new AttributeDirectoryLoader($fileLocator, $attrClassLoader))->load(__DIR__); -
Les routes se créent maintenant avec la syntaxe simplifiée suivante :
use Symfony\Component\Routing\Attribute\Route; class ControleurPublication extends ControleurGenerique { #[Route(path: '/publications', name:'afficherListe', methods:["GET"])] public static function afficherListe(): Response { // ... } }On retrouve le
path, le nom de la route (pour les appels à$generateurURL->generate()) et les méthodes autorisées.Le tableau qui associait
_controllerà"\TheFeed\Controleur\ControleurUtilisateur::afficherListe"sera rajouté par la méthode ci-dessusAttributeRouteControllerLoader::configureRoute, qui elle-même sera appelée dans le mécanisme deAttributeDirectoryLoaderde Symfony.