Laravelのミドルウェアにパラメータを渡す方法!throttleや制限設定も解説
生徒
「先生、Laravelのミドルウェアに数字や文字を渡して動作を変えられるって本当ですか?」
先生
「はい、ミドルウェアにはパラメータを渡すことができます。例えば、アクセス制限の回数を指定する throttle:60,1 のような形です。」
生徒
「throttle:60,1ってどういう意味ですか?」
先生
「これは1分間に60回までアクセスを許可するという意味です。throttleは『制限』という意味で、APIやログインページのアクセス制御に便利です。」
1. ミドルウェアのパラメータとは?
Laravelのミドルウェアは、リクエストを受け取ったときに処理を追加する仕組みです。パラメータを渡すことで、同じミドルウェアでも動作を変えることができます。例えば、アクセス回数の上限や時間制限など、設定値を柔軟に変更できます。
2. パラメータ付きミドルウェアの書き方
パラメータ付きミドルウェアは、ルートで指定する際にコロン(:)とカンマ(,)を使います。例えば以下のように書きます。
Route::middleware('throttle:60,1')->group(function () {
Route::get('/api/data', 'ApiController@data');
});
この場合、throttle ミドルウェアに 60,1 というパラメータが渡されます。1分間に最大60回までアクセス可能です。
3. 自作ミドルウェアにパラメータを渡す方法
自分で作ったミドルウェアでもパラメータを受け取ることができます。例えば年齢制限のミドルウェアを作る場合を考えます。
public function handle($request, Closure $next, $minAge)
{
if ($request->user()->age < $minAge) {
return response('アクセス禁止', 403);
}
return $next($request);
}
この例では、$minAge というパラメータを受け取り、ユーザーの年齢が条件を満たさない場合はアクセスを拒否します。
4. ルートでのパラメータ指定方法
ルートでミドルウェアにパラメータを渡すときは、以下のように書きます。
Route::get('/restricted', 'UserController@index')
->middleware('check.age:18');
この場合、check.age ミドルウェアに 18 というパラメータが渡されます。ユーザーの年齢が18歳未満ならアクセスが拒否されます。
5. throttleミドルウェアの活用例
Laravelには組み込みの throttle ミドルウェアがあります。APIやログインフォームのアクセス制限に使えます。使い方の例を示します。
Route::middleware('throttle:10,1')->group(function () {
Route::post('/login', 'AuthController@login');
});
この設定では、1分間に10回までログインリクエストが可能です。もし超えた場合は429 Too Many Requests というHTTPステータスでアクセスが拒否されます。
6. パラメータ付きミドルウェアのポイント
- コロン(:)でミドルウェア名とパラメータを区切る
- 複数のパラメータはカンマ(,)で区切る
- 自作ミドルウェアでは
handleメソッドの引数で受け取る - APIやログインなど、回数制限や条件チェックに活用できる
- パラメータを使うことで、柔軟で再利用可能なミドルウェアが作れる
7. 実践例と注意点
例えば、異なるルートで異なる制限を設定したい場合、パラメータ付きミドルウェアが便利です。
Route::get('/api/free', 'ApiController@free')
->middleware('throttle:100,1');
Route::get('/api/premium', 'ApiController@premium')
->middleware('throttle:1000,1');
無料APIは1分間100回、プレミアムAPIは1分間1000回と制限を変えることができます。注意点として、パラメータの順序や型を間違えないようにしましょう。