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.