indexgo
login

Lumenで現在のルートを確認して、ルートによって処理を変える

Lumenで、routeによって処理の可否判定(各routeでのAPIの表示可否など)をしようと思ったら、現在のルートを探す方法が見つからなくてハマったので、解決方法をメモで残します。

作成者:Ssさん 公開日:2018年8月27日 16時54分 更新日:2018年8月27日 16時55分

getCurrentRoute()は使えなかった

Laravelでは、「getCurrentRoute()」を使うのがポピュラーのようですが、LumenではgetCurrentRoute()がprotectedになっていて読めないようです。

php - How to get current route name? - Stack Overflow

https://stackoverflow.com/questions/30046691/how-to-get-current-route-name

Good SoSo
In laravel 4 i was able to get current route name using Route::currentRouteName(). How can i do it in laravel 5?

$request->route()で、route設定のどこを通ってきているのかがわかる

$request->route()を呼び出すことで、routeファイル(/route/web.php)で記載したどのルートを通ってきてるのかを判定することができます。

$request->route()

array(3) { [0]=> int(1) [1]=> array(3) { ["as"]=> string(13) "ProductsIndex" ["uses"]=> string(45) "App\Http\Controllers\ProductsController@index" ["middleware"]=> array(3) { [0]=> string(4) "auth" [1]=> string(3) "api" [2]=> string(5) "mente" } } [2]=> array(1) { ["type"]=> string(11) "hogehogehog" } } 

ルートによって処理を変える

route名は、配列の最初([0])に入っているようなので、自分の場合は、[0]['as']でルートを判定して、処理をするようにしました。

$route_data = $request->route();

if(route_data[0]['as'] === 'ProductsIndex'){
    return response()->json('Not Found.', 404);
}

ミドルウェアなどの共通処理をする際に、必要なシーンが出てくるかもしれないので、覚えておくといいですね。