Laravel: come ottenere il nome del percorso attuale? (v5… v7)


226

In Laravel v4 sono stato in grado di ottenere il nome del percorso corrente utilizzando ...

Route::currentRouteName()

Come posso farlo in Laravel v5 e Laravel v6 ?


quale spazio dei nomi dovrei usare per trovare il nome del percorso? ho usato Illuminate \ Support \ Facades \ Route ma il risultato è nullo.
Md Rashedul Hoque Bhuiyan,

Questa è la classe corretta. Il tuo percorso probabilmente non ha un nome assegnato. Si noti che il nome della rotta e l'URI non sono gli stessi.
lukasgeiter


1
Perché ne avresti bisogno?
Yevgeniy Afanasyev il

Risposte:


440

Prova questo

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

o

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

dalla v5.1

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

Laravel v5.2

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

O se hai bisogno del nome dell'azione

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

Documentazione del percorso di Laravel 5.2

Recupero dell'URI della richiesta

Il metodo path restituisce l'URI della richiesta. Pertanto, se la richiesta in arrivo è indirizzata a http://example.com/foo/bar, il metodo path restituirà foo/bar:

$uri = $request->path();

Il ismetodo consente di verificare che l'URI della richiesta in entrata corrisponda a un determinato modello. È possibile utilizzare il *carattere come carattere jolly quando si utilizza questo metodo:

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

Per ottenere l'URL completo, non solo le informazioni sul percorso, è possibile utilizzare il metodo url sull'istanza della richiesta:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Documentazione del percorso di Laravel 5.3

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Attuale dall'11 novembre 2019 - versione 6.5 **

Documentazione del percorso Laravel 6.x.

C'è un'opzione per utilizzare la richiesta per ottenere il percorso

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

Hai un'idea su come filtrare questo, ad esempio, se vuoi solo stampare nella vista api routeapi/...
utdev

6
Route::currentRouteName();perfetto :)
EM-Creations,

$request::route()->getName()se stai già utilizzando la richiesta $ o puoi utilizzare l'helper globale request()::route()->getName().
Daniel Dewhurst,

@Daniel Dewhurst: Forse funziona su v <5.7, ma con v5.7 non devi usarlo staticamente, invece request()->route()->getName()è la strada da percorrere.
1stthomas,

5
L'uso della request()funzione di aiuto è particolarmente utile nelle viste. request()->route()->getName()è l'opzione migliore.
Samuel Shifterovich,

38

Usando Laravel 5.1, puoi usare

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

2
questo funziona anche quando lo metti in vista come {{ route(\Request::route()->getName()) }}. Grazie mille!
bonbon.langes,

24

Trovato un modo per trovare il nome della rotta corrente funziona per laravel v5 , v5.1.28 e v5.2.10

Spazio dei nomi

use Illuminate\Support\Facades\Route;

e

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

Per Laravel laravel v5.3 puoi semplicemente usare:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan Credo sia sempre meglio usare l'intero spazio dei nomi per evitare potenziali conflitti.
Amir Asyraf,

23

Se è necessario l' URL , non il nome della route , non è necessario utilizzare / richiedere altre classi:

url()->current();

Ciò restituisce un errore: "Chiama a una funzione membro current () su un non-oggetto". url () restituisce una stringa, non un oggetto, quindi non credo che questo avrebbe mai potuto funzionare. Forse stavi pensando a qualche altro metodo o oggetto, invece di url ()?
thelogix,

1
No, lo uso quotidianamente. Controlla i documenti ufficiali
Fusion

3
Vedo. Funziona solo nella versione 5.2 o successive . Ma è abbastanza carino.
thelogix

23

Se si desidera selezionare il menu su più percorsi, è possibile effettuare le seguenti operazioni:

<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>

Oppure, se vuoi selezionare un solo menu, puoi semplicemente fare così:

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

Testato anche in Laravel 5.2

Spero che questo aiuti qualcuno.


testato anche in Laravel 5.3
Renato Liibke

testato anche in Laravel 7.5.2
aspirinemaga l'

testato in Laravel 5.7
Tariqul Islam

13

Laravel 5.2 È possibile utilizzare

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

Ti darà il nome del percorso attuale.


7
Questo non è corretto. il name()metodo aggiungerà o modificherà il nome, mentre il getName()metodo lo restituirà.
Aron Rotteveel,

9

In 5.2, è possibile utilizzare la richiesta direttamente con:

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

o tramite il metodo helper:

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

Esempio di output:

"home.index"

2
Il metodo Helper è il migliore. Funziona con laravel-5.6
Yevgeniy Afanasyev

6

Il modo più breve è la facciata del percorso \Route::current()->getName()

Questo funziona anche in laravel 5.4. *


5

In un'azione del controller, potresti semplicemente fare:

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

$request qui è risolto dal contenitore di servizi di Laravel.

getName()restituisce il nome del percorso solo per i percorsi denominati , nullaltrimenti (ma è comunque possibile esplorare il\Illuminate\Routing\Route oggetto per qualcos'altro di interessante).

In altre parole, dovresti avere il tuo percorso definito in questo modo per avere "nameOfMyRoute" restituito:

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

5

È possibile utilizzare nel modello:

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



3

Accesso al percorso corrente (v5.3 in poi)

È possibile utilizzare i metodi current, currentRouteName e currentRouteAction sulla facciata del percorso per accedere alle informazioni sul percorso che gestisce la richiesta in arrivo:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Fare riferimento alla documentazione API sia per la classe sottostante della facciata del percorso sia per l'istanza del percorso per esaminare tutti i metodi accessibili.

Riferimento: https://laravel.com/docs/5.2/routing#accessing-the-current-route


3

Request::path(); è meglio, e ricordati di use Request;



1

Ho usato per ottenere il nome del percorso in larvel 5.3

Request::path()


1

Guardando \Illuminate\Routing\Router.phpè possibile utilizzare il metodo currentRouteNamed()iniettando un router nel metodo del controller. Per esempio:

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

o usando la facciata del percorso:

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

È inoltre possibile utilizzare il metodo is()per verificare se la route è denominata con uno dei parametri indicati, ma attenzione utilizza questo metodo preg_match()e l'ho sperimentato per causare un comportamento strano con nomi di route punteggiati (come 'foo.bar.done'). C'è anche la questione della performance attorno alla preg_match() quale è un argomento importante nella comunità PHP.

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

1

Secondo me la soluzione più semplice sta usando questo aiuto:

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

Per i documenti, vedi questo link


1

Puoi usare il metodo seguente:

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

Nella versione Laravel> 6.0, è possibile utilizzare i metodi seguenti:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

In un file Helper,

È possibile utilizzare Route::current()->uri()per ottenere l'URL corrente.

Quindi, se si confronta il nome del percorso per impostare la classe attiva nel menu, sarebbe utile se lo si utilizza

Route::currentRouteName() per ottenere il nome del percorso e confrontare


0

per alcuni motivi, non ho potuto usare nessuna di queste soluzioni. quindi ho appena dichiarato il mio percorso web.phpcome $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])e nel mio controller ho ottenuto il nome del percorso usando $routeName = $request->route()[1]['as'];quale $requestè il \Illuminate\Http\Request $requestparametro typehinted nel indexmetodo diUserController

usando Lumen 5.6. Spero che possa aiutare qualcuno.


0

Soluzione:

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

0

È possibile utilizzare il codice seguente per ottenere il nome del percorso nel file blade

request()->route()->uri
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.