Laravel: Jak uzyskać aktualną nazwę trasy? (v5… v7)

226

W Laravel v4 udało mi się uzyskać bieżącą nazwę trasy za pomocą ...

Route::currentRouteName()

Jak mogę to zrobić w Laravel v5 i Laravel v6 ?

Md Rashedul Hoque Bhuiyan
źródło
z której przestrzeni nazw powinienem korzystać, aby znaleźć nazwę trasy? Użyłem Illuminate \ Support \ Facades \ Route, ale wynik jest zerowy.
Pani Rashedul Hoque Bhuiyan,
To jest właściwa klasa. Twoja trasa prawdopodobnie nie ma przypisanej nazwy. Pamiętaj, że nazwa trasy i identyfikator URI nie są takie same.
lukasgeiter
Oto poprawna odpowiedź stackoverflow.com/questions/27397487/...
Kamil Kiełczewski
1
Dlaczego miałbyś tego potrzebować?
Jewgienij Afanasyjew

Odpowiedzi:

439

Spróbuj tego

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

lub

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

od wersji 5.1

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

Laravel v5.2

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

Lub jeśli potrzebujesz nazwy akcji

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

Dokumentacja trasy Laravel 5.2

Pobieranie identyfikatora URI żądania

Metoda ścieżki zwraca identyfikator URI żądania. Jeśli więc przychodzące żądanie jest skierowane http://example.com/foo/bar, metoda ścieżki zwróci foo/bar:

$uri = $request->path();

Ta ismetoda umożliwia sprawdzenie, czy identyfikator URI przychodzącego żądania jest zgodny z danym wzorcem. Korzystając z *tej metody, możesz użyć znaku jako symbolu wieloznacznego:

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

Aby uzyskać pełny adres URL, a nie tylko informacje o ścieżce, możesz użyć metody url w instancji żądania:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Dokumentacja trasy Laravel 5.3

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** Aktualny od 11 listopada 2019 r. - wersja 6.5 **

Dokumentacja trasy Laravel 6.x.

Istnieje opcja użycia żądania, aby uzyskać trasę

$request->route()->getName();
Adnan
źródło
Czy masz pomysł, jak to filtrować, na przykład, jeśli chcesz drukować tylko w widoku trasy APIapi/...
utdev
6
Route::currentRouteName();idealne :)
EM-Creations
$request::route()->getName()jeśli już korzystasz z żądania $ lub możesz skorzystać z globalnego pomocnika request()::route()->getName().
Daniel Dewhurst
@Daniel Dewhurst: Może działa na v <5.7, ale z v5.7 nie możesz używać go statycznie, zamiast tego request()->route()->getName()jest droga.
1stthomas
5
Korzystanie z request()funkcji pomocnika jest szczególnie przydatne w widokach. request()->route()->getName()jest najlepszą opcją.
Samuel Shifterovich,
38

Korzystając z Laravel 5.1, możesz używać

\Request::route()->getName()
Loranger
źródło
2
działa to również, gdy umieścisz go w widoku jako {{ route(\Request::route()->getName()) }}. Dzięki wielkie!
bonbon.langes
24

Znaleziony sposób na znalezienie aktualnej nazwy trasy działa dla laravel v5 , v5.1.28 i v5.2.10

Przestrzeń nazw

use Illuminate\Support\Facades\Route;

i

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

W przypadku Laravel Laravel v5.3 możesz po prostu użyć:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();
Md Rashedul Hoque Bhuiyan
źródło
@Jonathan Uważam, że zawsze lepiej jest używać pełnej przestrzeni nazw, aby uniknąć potencjalnego konfliktu.
Amir Asyraf
23

Jeśli potrzebujesz adresu URL , a nie nazwy trasy , nie musisz używać / wymagać żadnych innych klas:

url()->current();
Połączenie
źródło
Zwraca to błąd: „Wywołanie funkcji składowej current () na obiekcie niebędącym obiektem”. url () zwraca ciąg znaków, a nie obiekt, więc nie sądzę, aby mogło to kiedykolwiek zadziałać. Być może myślałeś o jakiejś innej metodzie lub obiekcie zamiast url ()?
thelogix
1
Nie, używam tego na codzień. Sprawdź oficjalne dokumenty
Fusion
3
Widzę. Działa to tylko w wersji 5.2 lub nowszej . Ale to całkiem miłe.
thelogix
23

Jeśli chcesz wybrać menu na wielu trasach, możesz to zrobić w następujący sposób:

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

Lub jeśli chcesz wybrać tylko jedno menu, możesz po prostu zrobić to w ten sposób:

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

Testowany również w Laravel 5.2

Mam nadzieję, że komuś to pomoże.

Webistan
źródło
testowany również w Laravel 5.3
Renato Liibke
testowane również w Laravel 7.5.2
aspiryna
testowany w Laravel 5.7
Tariqul Islam
13

Laravel 5.2 Możesz używać

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

Otrzymasz aktualną nazwę trasy.

Jalvin Vohra
źródło
7
To jest właściwie niepoprawne. name()metoda będzie dodać lub zmienić nazwę, natomiast getName()metoda zwraca go.
Aron Rotteveel,
9

W 5.2 możesz użyć żądania bezpośrednio z:

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

lub metodą pomocniczą:

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

Przykład wyjściowy:

"home.index"
Jonathan
źródło
2
Metoda pomocnicza jest najlepsza. Współpracuje z laravel-5.6
Jewgienij Afanasiew
6

Najkrótszą drogą jest Fasada trasy \Route::current()->getName()

Działa to również w Laravel 5.4. *

WhipsterCZ
źródło
5

W akcji kontrolera możesz po prostu zrobić:

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

$request tutaj rozwiązuje kontener serwisowy Laravela.

getName()zwraca nazwę trasy tylko dla nazwanych tras , w nullprzeciwnym razie (ale nadal możesz eksplorować \Illuminate\Routing\Routeobiekt w poszukiwaniu czegoś innego).

Innymi słowy, powinieneś zdefiniować swoją trasę w ten sposób, aby otrzymać „nameOfMyRoute”:

Route::get('my/some-action', [
    'as' => 'nameOfMyRoute',
    'uses' => 'MyController@someAction'
]);
Bogdan Ghervan
źródło
5

Możesz użyć w szablonie:

<?php $path = Route::getCurrentRoute()->getPath(); ?>
<?php if (starts_with($path, 'admin/')) echo "active"; ?>
JS Lee
źródło
4

Dostęp do bieżącej trasy

Uzyskaj bieżącą nazwę trasy w szablonach Blade

{{ Route::currentRouteName() }}

aby uzyskać więcej informacji https://laravel.com/docs/5.5/routing#accessing-the-current-route

Yogesh Chatrola
źródło
Dzięki za właściwą odpowiedź, straciłem 30 minut, próbując bezużytecznych sugestii.
Crasher
3

Dostęp do bieżącej trasy (wer. 5.3)

Możesz użyć metod current, currentRouteName i currentRouteAction na elewacji trasy, aby uzyskać dostęp do informacji o trasie obsługującej przychodzące żądanie:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Zapoznaj się z dokumentacją interfejsu API zarówno dla podstawowej klasy fasady Route, jak i instancji Route, aby przejrzeć wszystkie dostępne metody.

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

Amitesh
źródło
3

Request::path(); jest lepszy i pamiętaj o tym use Request;

worldask
źródło
2
$request->route()->getName();
panqingqiang
źródło
1

Użyłem nazwy trasy w Larvel 5.3

Request::path()

Dipak Kolhe
źródło
1

Patrząc na \Illuminate\Routing\Router.phpto, możesz użyć tej metody currentRouteNamed(), wstrzykując router do metody kontrolera. Na przykład:

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

lub korzystając z fasady Route:

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

Możesz także użyć tej metody, is()aby sprawdzić, czy trasa nosi nazwę dowolnego z podanych parametrów, ale uwaga: ta metoda używa preg_match()i doświadczyłem, że powoduje dziwne zachowanie z kropkowanymi nazwami tras (jak 'foo.bar.done'). Jest także kwestia wydajności, wokół preg_match() której jest duży temat w społeczności PHP.

public function index(Request $request) {
    return view(\Route::is('foo', 'bar') ? 'view1' : 'view2');
}
Rozpoznać
źródło
1

Moim zdaniem najłatwiejszym rozwiązaniem jest użycie tego pomocnika:

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

Dokumenty można znaleźć pod tym linkiem

DenBrown
źródło
1

Możesz użyć poniższej metody:

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

W wersji Laravel> 6.0 możesz użyć poniższych metod:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
vaibhavmht225
źródło
0

W pliku pomocnika

Możesz użyć Route::current()->uri() aby uzyskać aktualny adres URL.

Dlatego jeśli porównasz nazwę trasy, aby ustawić aktywną klasę w menu, dobrze byłoby użyć

Route::currentRouteName() aby uzyskać nazwę trasy i porównać

Patel Ankit
źródło
0

z niektórych powodów nie mogłem użyć żadnego z tych rozwiązań. więc właśnie zadeklarowałem swoją trasę, web.phpponieważ $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])w moim kontrolerze otrzymałem nazwę trasy, $routeName = $request->route()[1]['as'];która $requestjest \Illuminate\Http\Request $requestparametrem podanym w indexmetodzieUserController

za pomocą Lumen 5.6. Mam nadzieję, że to komuś pomoże.

MajidJafari
źródło
0

Rozwiązanie :

$routeArray = app('request')->route()->getAction();
$controllerAction = class_basename($routeArray['controller']);
list($controller, $route) = explode('@', $controllerAction);
echo $route;
Kundan Roy
źródło
0

Możesz użyć poniższego kodu, aby uzyskać nazwę trasy w pliku bloku

request()->route()->uri
yagnik devani
źródło