Laravel: Comment obtenir le nom de l'itinéraire actuel? (v5… v7)


226

Dans Laravel v4, j'ai pu obtenir le nom de l'itinéraire actuel en utilisant ...

Route::currentRouteName()

Comment puis-je le faire dans Laravel v5 et Laravel v6 ?


quel espace de noms dois-je utiliser pour trouver le nom de la route? j'ai utilisé Illuminate \ Support \ Facades \ Route mais le résultat est nul.
Md Rashedul Hoque Bhuiyan

C'est la bonne classe. Votre itinéraire n'a probablement pas de nom attribué. Notez que le nom de l'itinéraire et l'URI ne sont pas identiques.
lukasgeiter


1
Pourquoi en auriez-vous besoin?
Yevgeniy Afanasyev

Réponses:


440

Essaye ça

Route::getCurrentRoute()->getPath();

ou

\Request::route()->getName()

à partir de la v5.1

use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();

Laravel v5.2

Route::currentRouteName(); //use Illuminate\Support\Facades\Route;

Ou si vous avez besoin du nom de l'action

Route::getCurrentRoute()->getActionName();

Documentation d'itinéraire Laravel 5.2

Récupération de l'URI de la demande

La méthode path renvoie l'URI de la demande. Donc, si la demande entrante est ciblée http://example.com/foo/bar, la méthode path retournera foo/bar:

$uri = $request->path();

La isméthode vous permet de vérifier que l'URI de la demande entrante correspond à un modèle donné. Vous pouvez utiliser le *caractère comme caractère générique lorsque vous utilisez cette méthode:

if ($request->is('admin/*')) {
    //
}

Pour obtenir l'URL complète, pas seulement les informations de chemin, vous pouvez utiliser la méthode url sur l'instance de demande:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Documentation d'itinéraire Laravel 5.3

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** À jour au 11 novembre 2019 - version 6.5 **

Documentation d'itinéraire Laravel 6.x

Il y a une option pour utiliser la demande pour obtenir l'itinéraire

$request->route()->getName();

Avez-vous une idée de comment filtrer cela par exemple si l'on veut seulement imprimer dans les routes de vue apiapi/...
utdev

6
Route::currentRouteName();parfait :)
EM-Creations

$request::route()->getName()si vous utilisez déjà la demande $, ou vous pouvez utiliser l'assistant global request()::route()->getName().
Daniel Dewhurst

@Daniel Dewhurst: Peut-être que cela fonctionne sur v <5.7, mais avec v5.7 vous ne devez pas l'utiliser statiquement, c'est plutôt request()->route()->getName()la voie à suivre.
1stthomas

5
L'utilisation de la request()fonction d'assistance est particulièrement utile dans les vues. request()->route()->getName()est la meilleure option.
Samuel Shifterovich

38

En utilisant Laravel 5.1, vous pouvez utiliser

\Request::route()->getName()

2
cela fonctionne également lorsque vous le mettez sur la vue en tant que {{ route(\Request::route()->getName()) }}. Merci beaucoup!
bonbon.langes

24

Trouver un moyen de trouver le nom de l'itinéraire actuel fonctionne pour laravel v5 , v5.1.28 et v5.2.10

Espace de noms

use Illuminate\Support\Facades\Route;

et

$currentPath= Route::getFacadeRoot()->current()->uri();

Pour Laravel laravel v5.3, vous pouvez simplement utiliser:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan Je pense qu'il est toujours préférable d'utiliser l'espace de noms complet afin d'éviter tout conflit potentiel.
Amir Asyraf

23

Si vous avez besoin d'une URL , pas d'un nom de route , vous n'avez pas besoin d'utiliser / d'exiger d'autres classes:

url()->current();

Cela renvoie une erreur: "Appel à une fonction membre current () sur un non-objet". url () renvoie une chaîne, pas un objet, donc je ne pense pas que cela aurait pu fonctionner. Peut-être pensiez-vous à une autre méthode ou un autre objet, au lieu de url ()?
thelogix

1
Non, je l'utilise quotidiennement. Consultez les documents officiels
Fusion

3
Je vois. Cela ne fonctionne que dans la version 5.2 ou supérieure . Mais c'est assez sympa.
thelogix

23

Si vous souhaitez sélectionner le menu sur plusieurs itinéraires, vous pouvez faire ceci:

<li class="{{ (Request::is('products/*') || Request::is('products') || Request::is('product/*') ? 'active' : '') }}"><a href="{{url('products')}}"><i class="fa fa-code-fork"></i>&nbsp; Products</a></li>

Ou si vous voulez sélectionner un seul menu, vous pouvez simplement faire comme ceci:

<li class="{{ (Request::is('/users') ? 'active' : '') }}"><a href="{{url('/')}}"><i class="fa fa-envelope"></i>&nbsp; Users</a></li>

Également testé dans Laravel 5.2

J'espère que cela aidera quelqu'un.


également testé dans Laravel 5.3
Renato Liibke

également testé dans Laravel 7.5.2
aspirinemaga

testé dans Laravel 5.7
Tariqul Islam

13

Laravel 5.2 Vous pouvez utiliser

$request->route()->getName()

Il vous donnera le nom de l'itinéraire actuel.


7
C'est en fait incorrect. la name()méthode ajoute ou modifie le nom, tandis que la getName()méthode le renvoie.
Aron Rotteveel

9

Dans 5.2, vous pouvez utiliser la demande directement avec:

$request->route()->getName();

ou via la méthode d'assistance:

request()->route()->getName();

Exemple de sortie:

"home.index"

2
La méthode d'assistance est la meilleure. Fonctionne avec laravel-5.6
Yevgeniy Afanasyev

6

Le chemin le plus court est la façade de la Route \Route::current()->getName()

Cela fonctionne également dans laravel 5.4. *


5

Dans une action de contrôleur, vous pouvez simplement faire:

public function someAction(Request $request)
{
    $routeName = $request->route()->getName();
}

$request ici est résolu par le conteneur de service de Laravel.

getName()renvoie le nom de la route pour les routes nommées uniquement, nullsinon (mais vous pouvez toujours explorer l' \Illuminate\Routing\Routeobjet pour quelque chose d'autre d'intérêt).

En d'autres termes, vous devriez avoir votre itinéraire défini comme ceci pour que "nameOfMyRoute" soit renvoyé:

Route::get('my/some-action', [
    'as' => 'nameOfMyRoute',
    'uses' => 'MyController@someAction'
]);

5

Vous pouvez utiliser dans le modèle:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>



3

Accès à l'itinéraire actuel (à partir de la v5.3)

Vous pouvez utiliser les méthodes current, currentRouteName et currentRouteAction sur la façade Route pour accéder aux informations sur l'itinéraire gérant la demande entrante:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Reportez-vous à la documentation de l'API pour la classe sous-jacente de la façade Route et de l'instance Route pour passer en revue toutes les méthodes accessibles.

Référence: https://laravel.com/docs/5.2/routing#accessing-the-current-route


3

Request::path(); est mieux, et n'oubliez pas de use Request;



1

J'ai utilisé pour obtenir le nom de l'itinéraire dans larvel 5.3

Request::path()


1

En regardant, \Illuminate\Routing\Router.phpvous pouvez utiliser la méthode currentRouteNamed()en injectant un routeur dans votre méthode de contrôleur. Par exemple:

use Illuminate\Routing\Router;
public function index(Request $request, Router $router) {
   return view($router->currentRouteNamed('foo') ? 'view1' : 'view2');
}

ou en utilisant la façade Route:

public function index(Request $request) {
   return view(\Route::currentRouteNamed('foo') ? 'view1' : 'view2');
}

Vous pouvez également utiliser la méthode is()pour vérifier si la route est nommée l'un des paramètres donnés, mais méfiez-vous que cette méthode utilise preg_match()et je l'ai expérimenté pour provoquer un comportement étrange avec les noms de route en pointillés (comme 'foo.bar.done'). Il y a aussi la question des performances preg_match() qui est un gros sujet dans la communauté PHP.

public function index(Request $request) {
    return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}

1

À mon avis, la solution la plus simple consiste à utiliser cet assistant:

request()->route()->getName()

Pour les documents, voir ce lien


1

Vous pouvez utiliser la méthode ci-dessous:

Route::getCurrentRoute()->getPath();

Dans la version Laravel> 6.0, vous pouvez utiliser les méthodes ci-dessous:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

Dans un fichier d'assistance,

Vous pouvez utiliser Route::current()->uri()pour obtenir l'URL actuelle.

Par conséquent, si vous comparez le nom de votre itinéraire pour définir la classe active dans le menu, ce serait bien si vous utilisez

Route::currentRouteName() pour obtenir le nom de l'itinéraire et comparer


0

pour certaines raisons, je n'ai pu utiliser aucune de ces solutions. donc je viens de déclarer ma route en web.phptant que $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])et dans mon contrôleur, j'ai obtenu le nom de la route en utilisant $routeName = $request->route()[1]['as'];ce qui $requestest le \Illuminate\Http\Request $requestparamètre de typehinted dans la indexméthode deUserController

en utilisant Lumen 5.6. J'espère que cela aiderait quelqu'un.


0

Solution :

$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;

0

Vous pouvez utiliser le code ci-dessous pour obtenir le nom de l'itinéraire dans le fichier lame

request()->route()->uri
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.