Laravel PHP

【Laravel】URL設計の落とし穴!ルーティング定義の順序が優先順位を決める理由と対策

Laravelのルーティング

Laravelのルーティングでは、ルートの定義順序によって優先順位が決まるため、

同じURLパスに対して複数のルートが定義されている場合、最初に定義されたルートが優先的にマッチングされます。

例えば、以下のように2つのルートを定義した場合、

Route::get('/users/{userId}', 'getByUserId');
Route::get('/users/recommend', 'getRecommendUsers');

'/users/{userId}'と'/users/recommend'の両方が'/users/'以下にあるため、

'/users/recommend'というURLに対してのリクエストが、'/users/{userId}'のルートにマッチングしてしまう可能性があります。

これは、'/users/{userId}'が'/users/recommend'よりも先に定義されているためです。

解決策

ルートの定義順序を変更する必要する

上記の例では、'/users/recommend'のルートを先に定義することで、

'/users/recommend'に対するリクエストが'/users/recommend'のルートにマッチングされるようになります。

Route::get('/users/recommend', 'getRecommendUsers');
Route::get('/users/{userId}', 'getByUserId');

以上のように、Laravelのルーティングにおいて、

定義順序がルートの優先順位に影響することを意識して、ルートの定義を行う必要があります。

-Laravel, PHP