Laravel:現在のルート名を取得する方法?(v5…v7)


226

Laravel v4では、次のコマンドを使用して現在のルート名を取得できました...

Route::currentRouteName()

Laravel v5Laravel v6ではどうすればよいですか?


ルート名を見つけるためにどの名前空間を使用すればよいですか?Illuminate \ Support \ Facades \ Routeを使用しましたが、結果がnullです。
Md Rashedul Hoque Bhuiyan 2015

それは正しいクラスです。ルートに名前が割り当てられていない可能性があります。ルート名とURIは同じではないことに注意してください。
lukasgeiter

ここでは、正しい答えのあるstackoverflow.com/questions/27397487/...
カミルKiełczewski

1
なぜそれが必要なのですか?
Yevgeniy Afanasyev 2018

回答:


440

これを試して

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

または

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

v5.1から

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

Laravel v5.2

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

または、アクション名が必要な場合

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

Laravel 5.2ルートドキュメント

リクエストURIの取得

pathメソッドはリクエストのURIを返します。したがって、着信リクエストがをターゲットにしているhttp://example.com/foo/bar場合、pathメソッドは次を返しfoo/barます:

$uri = $request->path();

このisメソッドを使用すると、着信要求URIが特定のパターンに一致することを確認できます。*この方法を使用する場合、文字をワイルドカードとして使用できます。

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

パス情報だけでなく完全なURLを取得するには、リクエストインスタンスでurlメソッドを使用します。

$url = $request->url();

Laravel v5.3 ... v5.8

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Laravel 5.3ルートドキュメント

Laravel v6.x ... 7.x

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

** 2019年11月11日現在-バージョン6.5 **

Laravel 6.xルートドキュメント

ルートを取得するリクエストを使用するオプションがあります

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

たとえば、ビューapiルートで印刷したいだけの場合にこれをフィルタリングする方法を知っていますかapi/...
utdev

6
Route::currentRouteName();完璧:)
EM-Creations

$request::route()->getName()すでに$ requestを使用している場合、またはグローバルヘルパーを使用できますrequest()::route()->getName()
Daniel Dewhurst

@Daniel Dewhurst:おそらくv <5.7で動作しますが、v5.7では静的に使用してはならず、代わりに使用できますrequest()->route()->getName()
1stthomas 2018年

5
request()ヘルパー関数の使用は、ビューで特に役立ちます。 request()->route()->getName()最良の選択肢です。
Samuel Shifterovich

38

Laravel 5.1を使用すると、

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

2
これは、ビューに配置した場合にも機能します{{ route(\Request::route()->getName()) }}。本当にありがとう!
bonbon.langes 2016

24

現在のルート名を検索する方法がlaravel v5v5.1.28v5.2.10機能すること発見しました

名前空間

use Illuminate\Support\Facades\Route;

そして

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

Laravel laravel v5.3の場合、次のように使用できます。

use Illuminate\Support\Facades\Route;

Route::currentRouteName();

@Jonathan潜在的な競合を回避するために、常に完全な名前空間を使用する方が良いと思います。
Amir Asyraf

23

ルート名ではなくurlが必要な場合は、他のクラスを使用/要求する必要はありません。

url()->current();

これは、「非オブジェクトのメンバー関数current()の呼び出し」というエラーを返します。url()はオブジェクトではなく文字列を返すので、これがうまくいったとは思えません。おそらく、url()の代わりに、他のメソッドまたはオブジェクトについて考えていましたか?
thelogix

1
いや、私はこれを日常的に使用しています。公式ドキュメントを
Fusion

3
そうですか。これはバージョン5.2以降でのみ機能します。しかし、とてもいいです。
thelogix

23

複数のルートでメニューを選択したい場合は、次のようにします。

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

または、単一のメニューのみを選択したい場合は、次のようにします。

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

Laravel 5.2でもテスト済み

これが誰かを助けることを願っています。


Laravel 5.3でもテスト
Renato Liibke

Laravel 7.5.2でもテスト
aspirinemaga

Laravel 5.7でテスト
タリクルイスラム教

13

Laravel 5.2使用できます

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

現在のルート名が表示されます。


7
これは実際には正しくありません。name()一方、この方法は、名前を追加または変更しますgetName()方法は、それを返します。
Aron Rotteveel 16

9

5.2では、次のもので直接リクエストを使用できます。

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

またはヘルパーメソッドを介して:

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

出力例:

"home.index"

2
ヘルパーメソッドが一番です。laravel-5.6で動作
Yevgeniy Afanasyev


5

コントローラーアクションでは、次のようにすることができます。

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

$request ここでLaravelのサービスコンテナによって解決されます。

getName()それ以外の場合は名前付きルートのルート名のみを返しますnull(ただし、\Illuminate\Routing\Routeオブジェクトを探索して他の興味深いものを探すことができます)。

つまり、「nameOfMyRoute」が返されるように、ルートを次のように定義する必要があります。

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

5

テンプレートで使用できます:

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



3

現在のルートへのアクセス(v5.3以降)

Routeファサードのcurrent、currentRouteName、およびcurrentRouteActionメソッドを使用して、着信要求を処理するルートに関する情報にアクセスできます。

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Routeファサードの基本クラスとRouteインスタンスの両方のAPIドキュメントを参照して、すべてのアクセス可能なメソッドを確認してください。

リファレンス:https : //laravel.com/docs/5.2/routing#accessing-the-current-route





1

見てみると、コントローラーメソッドにルーターを注入することで\Illuminate\Routing\Router.phpメソッドを使用できますcurrentRouteNamed()。例えば:

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

またはRouteファサードを使用:

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

このメソッドis()を使用して、ルートに指定されたパラメータの名前が付けられているかどうかを確認することもできますが、このメソッドを使用するpreg_match()と、ドット付きのルート名(など'foo.bar.done')で奇妙な動作が発生することがあります。またpreg_match() 、PHPコミュニティの大きなテーマであるパフォーマンスの問題もあります。

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


1

以下の方法を使用できます:

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

Laravelバージョン> 6.0では、以下の方法を使用できます。

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();


0

ヘルパーファイルでは、

を使用Route::current()->uri()して、現在のURLを取得できます。

したがって、ルート名を比較してメニューにアクティブクラスを設定する場合は、

Route::currentRouteName() ルートの名前を取得して比較する


0

いくつかの理由で、これらのソリューションを使用できませんでした。私はちょうどに私のルートを宣言したように、web.phpなど$router->get('/api/v1/users', ['as' => 'index', 'uses' => 'UserController@index'])と私のコントローラで私が使用してルートの名前ださにパラメータをtypehinted する方法を$routeName = $request->route()[1]['as'];$request\Illuminate\Http\Request $requestindexUserController

Lumen 5.6を使用します。それが誰かを助けることを願っています。


0

解決 :

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.