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 ?


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


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();

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

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();

@ 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();

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.


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.


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"

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


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'
]);

5

Sie können in Vorlage verwenden:

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



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




1

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

Request::path()


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');
}

1

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

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

Die Dokumente finden Sie unter diesem Link


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();


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


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.


0

Lösung:

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

0

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

request()->route()->uri
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.