Laravel: Mevcut Rota Adı Nasıl Alınır? (v5… v7)


226

Laravel v4'te şu anki rota adını ...

Route::currentRouteName()

Laravel v5 ve Laravel v6'da nasıl yapabilirim ?


rota adını bulmak için hangi ad alanını kullanmalıyım? Illuminate \ Support \ Facades \ Route kullandım ama sonuç null.
Md Rashedul Hoque Bhuiyan

Doğru sınıf bu. Rotanızın muhtemelen atanmış adı yok. Rota adının ve URI'nin aynı olmadığını unutmayın.
lukasgeiter


1
Neden ihtiyacın var?
Yevgeniy Afanasyev

Yanıtlar:


440

Bunu dene

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

veya

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

v5.1 sürümünden

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

Laravel v5.2

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

Veya işlem adına ihtiyacınız varsa

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

Laravel 5.2 güzergah dokümantasyonu

İstek URI'sını Alma

Yol yöntemi, isteğin URI'sini döndürür. Dolayısıyla, gelen istek hedeflenirse http://example.com/foo/bar, path yöntemi döndürülür foo/bar:

$uri = $request->path();

isYöntem Gelen istek URI belirli bir kalıpla eşleştiğini doğrulamak için izin verir. *Bu yöntemi kullanırken karakteri joker karakter olarak kullanabilirsiniz :

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

Yalnızca yol bilgisini değil, tam URL'yi almak için istek örneğinde url yöntemini kullanabilirsiniz:

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3 hat dokümantasyonu

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** 11 Kasım 2019 itibarıyla mevcut - sürüm 6.5 **

Laravel 6.x güzergah dokümantasyonu

Rota almak için istek kullanma seçeneği vardır

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

Örneğin, yalnızca görünüm api yollarında yazdırmak istiyorsa, bunu nasıl filtreleyeceğiniz hakkında bir fikriniz var mıapi/...
utdev

6
Route::currentRouteName();mükemmel :)
EM-Creations

$request::route()->getName()zaten $ isteğini kullanıyorsanız veya genel yardımcıyı kullanabilirsiniz request()::route()->getName().
Daniel Dewhurst

@Daniel Dewhurst: Belki v <5.7 üzerinde çalışır, ancak v5.7 ile statik olarak kullanmamalısınız, request()->route()->getName()gitmek için bir yoldur.
1sthomas

5
Kullanarak request()yardımcı fonksiyon görünümlerinde özellikle yararlıdır. request()->route()->getName()en iyi seçenektir.
Samuel Shifterovich

38

Laravel 5.1 kullanarak şunları kullanabilirsiniz:

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

2
bu, görünüm olarak koyduğunuzda da çalışır {{ route(\Request::route()->getName()) }}. Çok teşekkürler!
bonbon.langes

24

Laravel v5 , v5.1.28 ve v5.2.10 için geçerli rota adı işlerini bulmanın bir yolunu buldu

Ad alanı

use Illuminate\Support\Facades\Route;

ve

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

Laravel laravel v5.3 için şunları kullanabilirsiniz:

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan Herhangi bir potansiyel çatışmayı önlemek için tam ad alanını kullanmanın her zaman daha iyi olduğuna inanıyorum.
Amir Asyraf

23

Rota adına değil URL'ye ihtiyacınız varsa , başka sınıflar kullanmanız / zorunlu tutmanız gerekmez:

url()->current();

Bu bir hata döndürür: "Nesne dışı bir üye işlev current () çağrısı". url () bir dize döndürür, bir nesne değil, bu yüzden bu hiç işe yaramış olabilir sanmıyorum. Belki de url () yerine başka bir yöntem veya nesne düşünüyordunuz?
thelogix

1
Hayır, bunu günlük olarak kullanıyorum. Resmi dokümanlara göz
Fusion

3
Anlıyorum. Bu yalnızca 5.2 veya daha sonraki sürümlerde çalışır . Ama oldukça güzel.
thelogix

23

Birden fazla rotadaki menüyü seçmek isterseniz, bunu yapabilirsiniz:

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

Veya yalnızca tek bir menü seçmek isterseniz, bunu yapabilirsiniz:

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

Ayrıca test edildi Laravel 5.2'de

Umarım bu birine yardım eder.


ayrıca Laravel 5.3'te test edildi
Renato Liibke

ayrıca Laravel 7.5.2'de test edildi
aspirinemaga

Laravel 5.7'de test edildi
Tarık İslam

13

Laravel 5.2 Kullanabilirsiniz

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

Size geçerli güzergah adını verecektir.


7
Bu aslında yanlış. name()ederken yöntem eklemek veya adı değişecek getName()yöntem döndürür.
Aron Rotteveel

9

5.2'de, isteği doğrudan aşağıdakilerle kullanabilirsiniz:

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

veya yardımcı yöntemle:

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

Çıktı örneği:

"home.index"

2
Yardımcı yöntem en iyisidir. Laravel-5.6 ile çalışır
Yevgeniy Afanasyev

6

En kısa yol Güzergah cephesidir \Route::current()->getName()

Bu laravel 5.4'te de çalışır. *


5

Bir denetleyici eyleminde şunları yapabilirsiniz:

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

$request burada Laravel'in servis konteyneri tarafından çözülüyor.

getName()yalnızca adlandırılmış rotalar için rota adını döndürür , nullaksi takdirde (yine de\Illuminate\Routing\Route nesneyi de ilgi çekici başka bir şey için ).

Başka bir deyişle, "nameOfMyRoute" ifadesinin döndürülmesi için rotanızın şu şekilde tanımlanması gerekir:

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

5

Şablonda kullanabilirsiniz:

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



3

Geçerli Rotaya Erişme (v5.3 sonrası)

Gelen isteği işleyen yol hakkındaki bilgilere erişmek için Güzergah cephesindeki current, currentRouteName ve currentRouteAction yöntemlerini kullanabilirsiniz:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Erişilebilir tüm yöntemleri gözden geçirmek için hem Rota cephesinin hem de Rota örneğinin temel sınıfı için API belgelerine bakın.

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





1

Baktığımızda \Illuminate\Routing\Router.phpsizin yöntemi kullanabilirsiniz currentRouteNamed()Denetleyiciniz yönteminde bir yönlendirici enjekte ederek. Örneğin:

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

veya Güzergah cephesini kullanarak:

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

is()Rotanın verilen parametrelerden herhangi birinin adlandırılıp adlandırılmadığını kontrol etmek için yöntemi de kullanabilirsiniz , ancak bu yöntemin kullandığına dikkat edin preg_match()ve noktalı rota adları (gibi 'foo.bar.done') ile garip davranışlara neden olduğunu deneyimledim . preg_match() PHP topluluğunda büyük bir konu olan bir performans meselesi de var .

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


1

Aşağıdaki yöntemi kullanabilirsiniz:

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

Laravel sürüm> 6.0'da aşağıdaki yöntemleri kullanabilirsiniz:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

Bir Yardımcı dosyasında,

Route::current()->uri()Mevcut URL'yi almak için kullanabilirsiniz .

Bu nedenle, menüde aktif sınıf ayarlamak için rota adınızı karşılaştırırsanız,

Route::currentRouteName() Güzergahın adını almak ve karşılaştırmak için


0

bazı nedenlerden dolayı bu çözümlerden hiçbirini kullanamadım. bu yüzden sadece rotamı web.phpolarak ilan ettim $router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])ve kontrol cihazımda , typehinted parametresi $routeName = $request->route()[1]['as'];olan rotanın adını aldım$request\Illuminate\Http\Request $requestindex yöntemiUserController

Lumen kullanarak 5.6. Umarım birine yardım eder.


0

Çözüm :

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

0

Blade dosyasında rota adı almak için feryat kodu kullanabilirsiniz

request()->route()->uri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.