Laravel: Wie erhalte ich den aktuellen Routennamen? (v5… v7)

226

In Laravel v4 konnte ich den aktuellen Routennamen mit ...

Route::currentRouteName()

Wie kann ich das in Laravel v5 und Laravel v6 machen ?

Md Rashedul Hoque Bhuiyan
quelle
Welchen Namespace soll ich verwenden, um den Routennamen zu finden? Ich habe Illuminate \ Support \ Facades \ Route verwendet, aber das Ergebnis ist null.
Md Rashedul Hoque Bhuiyan
Das ist die richtige Klasse. Ihrer Route ist wahrscheinlich kein Name zugewiesen. Beachten Sie, dass der Routenname und der URI nicht identisch sind.
Lukasgeiter
Hier ist die richtige Antwort stackoverflow.com/questions/27397487/…
Kamil Kiełczewski
1
Warum brauchst du es?
Jewgenij Afanasjew

Antworten:

439

Versuche dies

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

oder

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

ab v5.1

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

Laravel v5.2

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

Oder wenn Sie den Aktionsnamen benötigen

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

Laravel 5.2 Routendokumentation

Abrufen des Anforderungs-URI

Die Pfadmethode gibt den URI der Anforderung zurück. Wenn die eingehende Anforderung anvisiert wird http://example.com/foo/bar, gibt die Pfadmethode Folgendes zurück foo/bar:

$uri = $request->path();

Mit dieser isMethode können Sie überprüfen, ob der URI für eingehende Anforderungen einem bestimmten Muster entspricht. Sie können das *Zeichen als Platzhalter verwenden, wenn Sie diese Methode verwenden:

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

Um die vollständige URL und nicht nur die Pfadinformationen abzurufen, können Sie die URL-Methode für die Anforderungsinstanz verwenden:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3 Routendokumentation

Laravel v6.x ... 7.x.

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Stand 11. November 2019 - Version 6.5 **

Laravel 6.x-Routendokumentation

Es besteht die Möglichkeit, die Anforderung zum Abrufen der Route zu verwenden

$request->route()->getName();
Adnan
quelle
Haben Sie eine Idee, wie man dies zum Beispiel filtert, wenn man nur in der Ansicht API-Routen drucken möchteapi/...
utdev
6
Route::currentRouteName();perfekt :)
EM-Creations
$request::route()->getName()Wenn Sie bereits die $ -Anforderung verwenden oder den globalen Helfer verwenden können request()::route()->getName().
Daniel Dewhurst
@ Daniel Dewhurst: Vielleicht funktioniert es unter v <5.7, aber mit v5.7 dürfen Sie es nicht statisch verwenden, sondern request()->route()->getName()ist der richtige Weg.
Thomas
5
Die Verwendung der request()Hilfsfunktion ist in Ansichten besonders nützlich. request()->route()->getName()ist die beste Option.
Samuel Shifterovich
38

Mit Laravel 5.1 können Sie verwenden

\Request::route()->getName()
Loranger
quelle
2
Dies funktioniert auch, wenn Sie es in die Ansicht als setzen {{ route(\Request::route()->getName()) }}. Vielen Dank!
bonbon.langes
24

Es wurde eine Möglichkeit gefunden, den aktuellen Routennamen zu finden. Dies funktioniert für Laravel v5 , v5.1.28 und v5.2.10

Namespace

use Illuminate\Support\Facades\Route;

und

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

Für Laravel laravel v5.3 können Sie einfach Folgendes verwenden:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();
Md Rashedul Hoque Bhuiyan
quelle
@ Jonathan Ich glaube, es ist immer besser, den vollständigen Namespace zu verwenden, um mögliche Konflikte zu vermeiden.
Amir Asyraf
23

Wenn Sie brauchen , url , nicht Routennamen , brauchen Sie nicht zu nutzen / alle anderen Klassen erfordern:

url()->current();
Verschmelzung
quelle
Dies gibt einen Fehler zurück: "Aufruf einer Mitgliedsfunktion current () für ein Nicht-Objekt". url () gibt eine Zeichenfolge zurück, kein Objekt, daher glaube ich nicht, dass dies jemals hätte funktionieren können. Vielleicht haben Sie über eine andere Methode oder ein anderes Objekt nachgedacht, anstatt über url ()?
Thelogix
1
Nein, ich benutze das täglich. Überprüfen Sie die offiziellen Dokumente
Fusion
3
Aha. Dies funktioniert nur in Version 5.2 oder höher . Aber es ist ganz nett.
Thelogix
23

Wenn Sie ein Menü auf mehreren Routen auswählen möchten, können Sie Folgendes tun:

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

Oder wenn Sie nur ein einziges Menü auswählen möchten, können Sie einfach Folgendes tun:

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

Auch in Laravel 5.2 getestet

Hoffe das hilft jemandem.

Webistan
quelle
auch getestet in Laravel 5.3
Renato Liibke
auch getestet in Laravel 7.5.2
aspirinemaga
getestet in Laravel 5.7
Tariqul Islam
13

Laravel 5.2 können Sie verwenden

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

Sie erhalten den aktuellen Routennamen.

Jalvin Vohra
quelle
7
Das ist eigentlich falsch. Die name()Methode fügt den Namen hinzu oder ändert ihn, während die getName()Methode ihn zurückgibt.
Aron Rotteveel
9

In 5.2 können Sie die Anfrage direkt verwenden mit:

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

oder über die Hilfsmethode:

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

Ausgabebeispiel:

"home.index"
Jonathan
quelle
2
Die Hilfsmethode ist die beste. Arbeitet mit Laravel-5.6
Yevgeniy Afanasyev
6

Der kürzeste Weg ist die Routenfassade \Route::current()->getName()

Dies funktioniert auch in Laravel 5.4. *

WhipsterCZ
quelle
5

In einer Controller-Aktion können Sie einfach Folgendes tun:

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

$request Hier wird durch Laravels Service-Container gelöst.

getName()Gibt ansonsten den Routennamen nur für benannte Routen zurück ( nullandernfalls können Sie die Route trotzdem erkunden\Illuminate\Routing\Route Objekt nach etwas anderem von Interesse durchsuchen).

Mit anderen Worten, Sie sollten Ihre Route so definieren, dass "nameOfMyRoute" zurückgegeben wird:

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

Sie können in Vorlage verwenden:

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

Zugriff auf die aktuelle Route

Rufen Sie den aktuellen Routennamen in Blade-Vorlagen ab

{{ Route::currentRouteName() }}

Weitere Informationen finden Sie unter https://laravel.com/docs/5.5/routing#accessing-the-current-route

Yogesh Chatrola
quelle
Vielen Dank für eine richtige Antwort, verlor 30 Minuten mit nutzlosen Vorschlägen.
Crasher
3

Zugriff auf die aktuelle Route (ab Version 5.3)

Sie können die Methoden current, currentRouteName und currentRouteAction an der Routenfassade verwenden, um auf Informationen zur Route zuzugreifen, die die eingehende Anforderung verarbeitet:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

In der API-Dokumentation finden Sie Informationen zur zugrunde liegenden Klasse der Routenfassade und zur Routeninstanz, um alle verfügbaren Methoden zu überprüfen.

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

Amitesh
quelle
3

Request::path(); ist besser und denken Sie daran use Request;

Weltaufgabe
quelle
2
$request->route()->getName();
panqingqiang
quelle
1

Ich habe verwendet, um den Routennamen in Larvel 5.3 zu erhalten

Request::path()

Dipak Kolhe
quelle
1

Mit Blick auf \Illuminate\Routing\Router.phpSie kann die Methode currentRouteNamed()durch einen Router in Ihrer Controller - Methode zu injizieren. Beispielsweise:

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

oder über die Routenfassade:

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

Sie können die Methode auch verwenden, um is()zu überprüfen, ob die Route einen der angegebenen Parameter trägt. Beachten Sie jedoch, dass diese Methode verwendet wird, preg_match()und ich habe festgestellt, dass sie bei gepunkteten Routennamen (wie 'foo.bar.done') zu seltsamem Verhalten führt . Es gibt auch die Frage der Leistung, um preg_match() die es in der PHP-Community ein großes Thema gibt.

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

Meiner Meinung nach ist die einfachste Lösung die Verwendung dieses Helfers:

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

Die Dokumente finden Sie unter diesem Link

DenBrown
quelle
1

Sie können die folgende Methode verwenden:

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

In Laravel Version> 6.0 können Sie die folgenden Methoden verwenden:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
vaibhavmht225
quelle
0

In einer Hilfedatei

Sie können verwenden Route::current()->uri(), um die aktuelle URL abzurufen.

Wenn Sie also Ihren Routennamen vergleichen, um die aktive Klasse im Menü festzulegen, ist es gut, wenn Sie verwenden

Route::currentRouteName() um den Namen der Route zu erhalten und zu vergleichen

Ankit Patel
quelle
0

Aus bestimmten Gründen konnte ich keine dieser Lösungen verwenden. so ich meine Route nur in deklariert web.phpwie $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])und in meinem Controller habe ich den Namen der Route mit $routeName = $request->route()[1]['as'];der $requestsich \Illuminate\Http\Request $requestParameter in typehinted indexVerfahrenUserController

mit Lumen 5.6. Hoffe es würde jemandem helfen.

MajidJafari
quelle
0

Lösung:

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

Sie können den folgenden Code verwenden, um den Routennamen in der Blade-Datei abzurufen

request()->route()->uri
Yagnik Devani
quelle