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 ?


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


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

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

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

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

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.


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.


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"

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


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

5

Możesz użyć w szablonie:

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



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





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

1

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

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

Dokumenty można znaleźć pod tym linkiem


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


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ć


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.


0

Rozwiązanie :

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

0

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

request()->route()->uri
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.