beta

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

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

公開日:2018年8月27日

LumenでgetCurrentRoute()は使えない

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

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

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

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