2015-05-05 14 views
103

Ich versuche Name der aktuellen Route, es zu tun mit Strecke :: currentRouteName() 5.Wie erhält man den aktuellen Routennamen in Laravel 5?

In Laravel 4 ich in der Lage mit Laravel zu bekommen war.

Wie kann ich es in Laravel 5 tun?

Dank

+0

Welchen Namespace sollte ich verwenden, um den Routennamen zu finden? Ich habe Illuminate \ Support \ Facades \ Route verwendet, aber das Ergebnis ist null. – shuvrow

+0

Das ist die richtige Klasse. Deine Route hat wahrscheinlich keinen Namen zugewiesen. Beachten Sie, dass der Routenname und der URI nicht identisch sind. – lukasgeiter

+0

Hier ist die richtige Antwort http://stackoverflow.com/questions/27397487/get-current-path-outside-of-route –

Antwort

227

Versuchen Sie, diese

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

oder

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

von v5 +

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

Laravel 5,3

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

Oder wenn Sie den Namen der Aktion

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

benötigen, können Sie alles über Laravel Routen in der Laravel API finden: http://laravel.com/api/5.0/Illuminate/Routing/Router.html http://laravel.com/api/5.0/Illuminate/Routing.html

Das Abrufen URI anfordern

Die Pfadmethode gibt den URI der Anforderung zurück. Also, wenn die eingehende Anforderung an http://example.com/foo/bar ausgerichtet ist, wird der Pfad Methode foo/bar zurück:

$uri = $request->path(); 

Die is Methode, die Sie, dass die eingehende Anforderung URI zu überprüfen erlaubt einem bestimmten Muster übereinstimmt.Sie können das * Zeichen als Platzhalter verwenden, wenn diese Methode verwendet:

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

Um die vollständige URL zu erhalten, nicht nur die Pfadinformationen, können Sie die URL-Methode auf der Anforderungsinstanz verwenden:

$url = $request->url(); 
+0

Haben Sie eine Idee, wie dies zum Beispiel zu filtern, wenn man nur in der Ansicht api Routen 'api/... drucken möchte' – utdev

+0

'Route :: currentRouteName();' perfekt :) –

19

einen Weg gefunden, die aktuelle Route Name für Laravel arbeitet finden 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 Sie können einfach verwenden:

use Illuminate\Support\Facades\Route; 

Route::currentRouteName(); 
+0

Übrigens müssen Sie nicht den gesamten Namespace für eine Fassade importieren. 'Route verwenden;' wird ausreichen. Das ist nur einer der Vorteile von Fassaden in Laravel. – Jonathan

1

In einer Controller-Aktion, könnten Sie einfach tun:

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

$request hier durch Laravel Service-Behälter gelöst.

getName() gibt die Routennamen für named routes nur, null anders (aber man konnte immer noch das \Illuminate\Routing\Route Objekt für etwas anderes von Interesse erkunden).

Mit anderen Worten: Sie Ihre Route wie folgt definiert haben sollte "nameOfMyRoute" zurückgegeben haben:

Route::get('my/some-action', [ 
    'as' => 'nameOfMyRoute', 
    'uses' => '[email protected]' 
]); 
+0

Funktioniert nicht in Laravel 5.0 –

24

Mit Laravel 5.1 können Sie

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

das funktioniert auch, wenn Sie es als '' '{{route (\ Request :: route() -> getName())}}' '' auf die Ansicht setzen. Vielen Dank! –

5

Sie in Vorlage verwenden können:

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

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

12

Wenn Sie url, nicht Routennamen, Sie brauchen keine anderen Klassen zu verwenden/benötigen:

url()->current(); 
+0

Dies gibt einen Fehler zurück: "Aufruf einer Memberfunktion current() für ein Nicht-Objekt".url() gibt eine Zeichenkette zurück, kein Objekt, also glaube ich nicht, dass das jemals funktioniert haben könnte. Vielleicht hast du an eine andere Methode oder ein anderes Objekt gedacht anstatt an URL()? – thelogix

+1

Nein, ich benutze das täglich. Überprüfen Sie [offizielle Dokumente] (https://laravel.com/docs/5.2/helpers#method-url) – Fusion

+3

Ich sehe. Dies funktioniert nur in ** Version 5.2 oder höher **. Aber es ist ziemlich nett. – thelogix

7

Laravel 5.2 können Sie verwenden

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

Es wird Geben Sie den aktuellen Routennamen ein.

+6

Das ist eigentlich falsch. Die Methode 'name()' fügt den Namen hinzu oder ändert ihn, während die Methode 'getName()' ihn zurückgibt. –

10

Wenn Sie auf mehreren Routen zu ausgewählten Menü wollen, können Sie wie folgt 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 einzelne Menü ausgewählt wollen, können Sie einfach so tun:

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

Auch getestet in Laravel 5.2

Hoffe, dass diese jemandem helfen.

1

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

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

oder über die Hilfsmethode:

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

Ausgabebeispiel:

"home.index" 
4

Kürzester Weg Strecke Fassade \Route::current()->getName()

Dies funktioniert auch in Laravel 5.4. *

012 Jetzt
0

In einer Helper-Datei,

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

Daher Wenn Sie Ihre Routennamen zu vergleichen, auf Menü aktiv Klasse zu setzen, dann wäre es gut, wenn Sie

verwenden

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

1

ich für immer Routennamen verwendet habe in larvel 5,3

Request::path()

0

bei \Illuminate\Routing\Router.php der Suche können Sie die Methode currentRouteNamed() durch die Injektion eines Routers in Ihrem Controller-Methode verwenden. Zum Beispiel:

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

oder mit der Strecke Fassade:

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

Sie auch die Methode verwenden, um is() zu überprüfen, ob die Route eine der angegebenen Parameter benannt, aber passen Sie diese Methode verwendet preg_match() und Ich habe es erlebt, um merkwürdiges Verhalten mit gepunkteten Wegnamen zu verursachen (wie 'foo.bar.done'). Es gibt auch die Frage der Leistung um preg_match() , die ein großes Thema in der PHP-Community ist.

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