Laravelでは、次の方法で現在のURLからルート名を取得できます。
Route::currentRouteName()
しかし、特定のURLからルート名を取得するにはどうすればよいでしょうか。
ありがとうございました。
それを行うための非常に簡単な方法_Laravel 5.2
_
_app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1'))->getName()
_
ルート名は次のように出力されます_slug.posts.show
_
Update:[〜#〜] post [〜#〜]、[〜#〜] put [〜#〜]または[〜#〜] delete [〜 #〜]あなたはこのようにすることができます
_app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1', 'POST'))->getName()//reference https://github.com/symfony/http-foundation/blob/master/Request.php#L309
_
また、app('router')->getRoutes()->match(app('request')->create('/qqq/posts/68/u1', 'POST'))
を実行すると、_Illuminate\Routing\Route
_インスタンスが返され、getAction
、getValidators
などの複数の便利なパブリックメソッドを呼び出すことができます。ソースを確認してください https://github.com/illuminate/routing/blob/master/Route.php 詳細については。
すぐに使えるLaravelではこれができないと思います。また、Laravelのすべてのルートに名前が付けられているわけではないため、ルート名ではなくルートオブジェクトを取得する必要があることにも注意してください。
考えられる解決策の1つは、デフォルトの_\Iluminate\Routing\Router
_クラスを拡張し、保護されたRouter::findRoute(Request $request)
メソッドを使用するパブリックメソッドをカスタムクラスに追加することです。
簡単な例:
_class MyRouter extends \Illuminate\Routing\Router {
public function resolveRouteFromUrl($url) {
return $this->findRoute(\Illuminate\Http\Request::create($url));
}
}
_
このshouldは、指定したURLに一致するルートを返しますが、実際にはテストしていません。
この新しいカスタムルーターを組み込みルーターに置き換える場合は、新しいサービスプロバイダーを作成して、デフォルトのクラスではなく、新しいクラスをIoCコンテナーに登録する必要があることに注意してください。
以下のコードのServiceProviderをニーズに合わせて調整できます。
https://github.com/jasonlewis/enhanced-router
それ以外の場合、必要に応じてコードでカスタムルーターを手動でインスタンス化するだけの場合は、次のような操作を行う必要があります。
_$myRouter = new MyRouter(new \Illuminate\Events\Dispatcher());
$route = $myRouter->resolveRouteFromUrl('/your/url/here');
_
デフォルトの_\Iluminate\Routing\Router
_クラスを拡張せずに実行できます。
_ Route::dispatchToRoute(Request::create('/your/url/here'));
$route = Route::currentRouteName();
_
dispatchToRoute
呼び出しの後にRoute::currentRouteName()
を呼び出すと、ディスパッチされたリクエストの現在のルート名が返されます。
上記の解決策はどれも私にはうまくいきませんでした。
これは、ルートをURIと一致させる正しい方法です。
$url = 'url-to-match/some-parameter';
$route = collect(\Route::getRoutes())->first(function($route) use($url){
return $route->matches(request()->create($url));
});
他のソリューションはコンテナへのバインディングを実行し、ルートを台無しにする可能性があります...