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 ?

Md Rashedul Hoque Bhuiyan
la source
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
Voici la bonne réponse stackoverflow.com/questions/27397487/…
Kamil Kiełczewski
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();
Adnan
la source
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()
loranger
la source
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();
Md Rashedul Hoque Bhuiyan
la source
@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();
La fusion
la source
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.

Webistan
la source
é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.

Jalvin Vohra
la source
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"
Jonathan
la source
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. *

WhipsterCZ
la source
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'
]);
Bogdan Ghervan
la source
5

Vous pouvez utiliser dans le modèle:

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

Accéder à l'itinéraire actuel

Obtenir le nom de l'itinéraire actuel dans les modèles de lame

{{ Route::currentRouteName() }}

pour plus d'informations https://laravel.com/docs/5.5/routing#accessing-the-current-route

yogesh chatrola
la source
Merci pour une bonne réponse, perdu 30 minutes à essayer des suggestions inutiles.
Crasher
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

Amitesh
la source
3

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

Worldask
la source
2
$request->route()->getName();
panqingqiang
la source
1

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

Request::path()

Dipak Kolhe
la source
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');
}
Ken
la source
1

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

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

Pour les documents, voir ce lien

DenBrown
la source
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();
vaibhavmht225
la source
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

ankit patel
la source
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.

MajidJafari
la source
0

Solution :

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

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

request()->route()->uri
yagnik devani
la source