L’arrivée de la méthode named(...)
sur l’instance de route dans Laravel permet désormais de détecter simplement si la requête en cours correspond à un nom de route spécifique. Cette innovation rend possible l’écriture de logique conditionnelle directement basée sur la route, sans disperser des vérifications redondantes dans toute l’application.
Dans un contexte d’interface utilisateur, cela s’avère particulièrement utile pour afficher dynamiquement un menu de navigation. Dans l’exemple extrait de Laravel News, on crée un composant NavigationMenu
injectant la requête :
class NavigationMenu extends Component
{
public function __construct(private Request $request) {}
public function isActive(string $routeName): bool
{
return $this->request->route()->named($routeName);
}
public function isActiveSection(string $section): bool
{
return $this->request->route()->named("$section.*");
}
public function render()
{
return view('components.navigation-menu', [
'sections' => [
'dashboard' => [
'label' => 'Dashboard',
'route' => 'dashboard',
'active' => $this->isActive('dashboard')
],
'posts' => [
'label' => 'Articles',
'route' => 'posts.index',
'active' => $this->isActiveSection('posts')
],
'settings' => [
'label' => 'Paramètres',
'route' => 'settings.index',
'active' => $this->isActiveSection('settings')
]
]
]);
}
}
Dans la vue Blade, l’état actif se déclenche automatiquement grâce à :
<nav>
@foreach($sections as $section)
<a href="{{ route($section['route']) }}"
@class(['nav-link', 'active' => $section['active']])>
{{ $section['label'] }}
</a>
@endforeach
</nav>
L’innovation ici est l’intégration fluide de la détection contextuelle, évitant la multiplication de conditions dans chaque vue ou contrôleur. Cette approche simplifie aussi la maintenance : lorsqu’un nom de route change, tout le système de navigation s’ajuste instantanément.
Laravel permet depuis plusieurs versions de nommer une route dans routes/web.php via →name(‘profil’), facilitant la génération d’URL (route(‘profil’)) et de redirections (redirect()→route(‘profil’)) . La méthode named() est quant à elle apparue pour interroger la route courante dans un middleware ou un composant, renforçant la cohérence des interfaces ().
Un autre avantage intéressant est sa capacité à gérer des sections entières de routes avec les jokers : named(‘posts.*’) renvoie true pour posts.index, posts.create, etc. Cela évite les conditions complexes comme if (in_array($route, [‘posts.index’,‘posts.show’])).
Il reste cependant quelques limites. La méthode named() repose sur l’exactitude des noms de routes. Si une route est renommée, toute logique dépendante sera impactée et pourra provoquer des erreurs subtiles. De plus, dans les applications utilisant plusieurs sous-domaines, on préférera toujours des noms explicites, même si les helpers viennent parfois à gérer le bon domaine automatiquement (). Enfin, la personne responsable du routage doit s’assurer qu’il n’y a pas de collisions entre noms (posts.index vs posts.show) car Laravel exige l’unicité .
Prenons un exemple concret : imaginons un site e-commerce avec un menu “Produits” qui doit être actif lorsque l’on visite products.index, products.show ou products.create. Il suffit de faire :
if ($request->route()->named('products.*')) {
// activer le menu "Produits"
}
En résumé, l’arrivée de named() améliore la lisibilité et l’entretien du code, tout en réduisant la duplication. Elle s’inscrit parfaitement dans l’esprit Laravel : expressivité et cohérence. Pour en tirer pleinement parti, il faut bien structurer ses routes et être vigilant lors de leurs renominations.
En conclusion, la méthode named(…) appliquée à l’instance de route propose une manière élégante et maintenable de détecter la route active. Elle permet de centraliser la logique de navigation ou d’analyse dans des composants ou middlewares, simplifiant ainsi le code front/back. Ses apports facilitent la modularité, mais exigent une bonne discipline dans le nommage des routes pour éviter les comportements inattendus. Un ajout discret, mais qui peut significativement améliorer la qualité d’une application Laravel.
Sources
- Harris Raftopoulos - Smart Route Detection in Laravel