Comment obtenir le nom de l'itinéraire actuel?
Dans laravel 4, j'ai pu obtenir le nom de la route actuelle en utilisant
Route::currentRouteName()
.
Comment puis-je le faire dans laravel 5?
18 réponses
Essayez ceci
Route::getCurrentRoute()->getPath();
Ou
\Request::route()->getName()
De v5.+
use Illuminate\Support\Facades\Route;
$currentPath= Route::getFacadeRoot()->current()->uri();
Laravel 5.3
Route::currentRouteName(); //use Illuminate\Support\Facades\Route;
, Ou si vous avez besoin du nom de l'action
Route::getCurrentRoute()->getActionName();
Vous pouvez trouver tout sur les Routes laravel dans L'API Laravel: http://laravel.com/api/5.0/Illuminate/Routing/Router.html http://laravel.com/api/5.0/Illuminate/Routing.html
Récupération de L'URI de la requête
La méthode path renvoie L'URI de la requête. Donc, si la requête entrante est ciblée sur http://example.com/foo/bar
, la méthode path retournera foo/bar
:
$uri = $request->path();
La méthode is
vous permet de vérifier que L'URI de la requête 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 requête:
$url = $request->url();
En utilisant Laravel 5.1, vous pouvez utiliser
\Request::route()->getName()
Trouvé un moyen de trouver l'itinéraire actuel nom 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();
Si vous avez besoin d' url, pas nom de l'itinéraire, vous n'avez pas besoin d'utiliser/d'exiger que toute les autres classes:
url()->current();
Si vous voulez sélectionner le menu sur plusieurs routes, vous pouvez faire comme ceci:
<li class="{{ (Request::is('products/*') || Request::is('products') || Request::is('product/*') ? 'active' : '') }}"><a href="{{url('products')}}"><i class="fa fa-code-fork"></i> Products</a></li>
Ou si vous souhaitez 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> Users</a></li>
Également testé dans Laravel 5.2
J'espère que cela aidera quelqu'un.
Laravel 5.2 Vous pouvez utiliser
$request->route()->getName()
Il vous donnera le nom de l'itinéraire actuel.
Le chemin le plus court est la façade de Route
\Route::current()->getName()
Cela fonctionne également dans laravel 5.4.*
Vous pouvez utiliser dans le modèle:
<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
Maintenant, dans Laravel 5.3
je vois que cela peut être fait de la même manière que vous avez essayé:
$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();
Https://laravel.com/docs/5.3/routing#accessing-the-current-route
En 5.2, vous pouvez utiliser la requête directement avec:
$request->route()->getName();
Ou via la méthode helper:
request()->route()->getName();
Exemple de Sortie:
"home.index"
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()
retourne le nom de l'itinéraire pour routes nommées seulement, null
sinon (mais vous pouvez toujours explorer les \Illuminate\Routing\Route
objet pour quelque chose d'intérêt).
En d'autres termes, vous devriez avoir votre route définie comme ceci pour avoir" nameOfMyRoute " retourné:
Route::get('my/some-action', [
'as' => 'nameOfMyRoute',
'uses' => 'MyController@someAction'
]);
J'ai utilisé pour obtenir le nom de la route dans larvel 5.3
Request::path()
Regardant \Illuminate\Routing\Router.php
, vous pouvez utiliser la méthode currentRouteNamed()
par l'injection d'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 de 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 attention cette méthode utilise preg_match()
et je l'ai expérimenté pour provoquer un comportement étrange avec des noms de route pointillés (comme 'foo.bar.done'
). Il y a aussi la question de la performance autour de preg_match()
ce qui est un gros sujet dans le PHP communauté.
public function index(Request $request) {
return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}
Accès à la Route actuelle (V5. 3 et suivantes)
Vous pouvez utiliser les méthodes current, currentRouteName et currentRouteAction sur la façade Route pour accéder aux informations sur la route traitant la requête 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 de Route et l'instance de Route pour examiner toutes les méthodes accessibles.
Référence : https://laravel.com/docs/5.2/routing#accessing-the-current-route
Dans un fichier D'aide,
Vous pouvez utiliser Route::current()->uri()
pour obtenir l'URL actuelle.
Par conséquent, si vous comparez le nom de votre route pour définir la classe active dans le menu, il serait bon d'utiliser
Route::currentRouteName()
pour obtenir le nom de l'itinéraire et comparer
Accès À La Route Actuelle
Récupère le nom d'itinéraire actuel dans les modèles de lame
{{ Route::currentRouteName() }} pour obtenir le nom de la route
Pour plus d'informations https://laravel.com/docs/5.5/routing#accessing-the-current-route
Pour certaines raisons, je ne pouvais utiliser aucune de ces solutions. donc j'ai juste a déclaré ma route dans web.php
comme $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])
et dans mon contrôleur, j'ai obtenu le nom de la route à l'aide de $routeName = $request->route()[1]['as'];
qui $request
est \Illuminate\Http\Request $request
typehinted paramètre index
méthode de UserController
Utilisation De Lumen 5.6. L'espoir que cela aiderait quelqu'un.