Laravelのmiddlewareの作成方法
こんにちは、技術部の T です。今回はLaravelのmiddlewareの作成方法について書いていきます。
Laravelのmiddlewareとは
ブラウザなどからリクエストを受けて処理する前に何か処理を行いたい時や、 リクエストの処理が終わった後に何か処理を行うような時に作成するファイルになります。 よく利用される例として、ユーザーの認証などの処理を行ったりします。
middlewareの作成方法
middlewareは以下のartisanコマンドで作成可能です。
php artisan make:middleware [ミドルウェア名]
コマンドを入力するとapp/Http/Middleware/[ミドルウェア名] .phpが作成されます。
リクエストの前に処理を行いたい場合、`$next()`の前に処理を書くことで実行されます。リクエスト後に処理を行いたい場合、`$next()`の後に処理を書くことで実行されます。
以下がコマンドを入力した際に出来るファイルの中身となります
class [ミドルウェア名]
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// リクエストの前に処理を行いたい場合ここに処理を書く
$response = $next($request); // ここで次のミドルウェアもしくは実処理に移動
// リクエストの後に処理を行いたい場合ここに処理を書く
return $response;
}
}
kernelへの登録
middlewareはkernelに登録することで、使用できるようになります。
カーネルは以下の場所にあるファイルです。
app/Http/Kernel.php
kernelには$middleware,$middlewareGroups,$routeMiddlewareが存在しています。
$middlewareには全ての処理に対して処理を行いたい場合に記載します。
$middlewareGroupsにはいくつかの処理に名前を付けてグループと
して登録したい場合に記載します。
$routeMiddlewareには単体で使用するmiddlewareに名前を付けて登録したい場合に記載します。
$middlewareへの登録
$middlewareに登録する場合は以下のように記載する。
protected $middleware = [
Middleware\[ミドルウェア名]::class
];
$middlewareGroupsへの登録
$middlewareGroupsに登録する場合は以下のように記載する。
これでグループとして括られたmiddlewareはまとめて実行されます。
protected $middlewareGroups = [
'group_name' => [ //グループ名は任意で命名する。
Middleware\[ミドルウェア名]::class,
Middleware\AnotherMiddleware::class,
]
];
$routeMiddlewareへの登録
$routeMiddlewareに登録する場合は以下のように記載する。
protected $routeMiddleware = [
'one' => Middleware\[ミドルウェア名]::class,
'two' => Middleware\SecondMiddleware::class,
];
web.phpでの登録方法
$middlewareGroupsと$routeMiddlewareはweb.phpで指定する必要があります。
書き方は2種類あります。
まず一つ目は以下のように1つのルーティングに対して指定する方法です。
// ひとつのmiddlewareを指定する場合
Route::get('/hello', function () { return view('hello'); })->middleware('group_name');
// 複数のmiddlewareを指定する場合
Route::get('/hello', function () { return view('hello'); })->middleware(['one','two']);
二つ目に以下のようにrouteグループに指定する方法です。
Route::group(['middleware' => ['one']], function () {
Route::get('/hello', function () { return view('hello'); });
Route::get('/bye', function () { return view('bye'); });
});
最後に
以上の作業でmiddlewareを使用することが出来ます。 開発で使用する際は参考にしてみて下さい。 最後まで読んでいただきありがとうございました。
関連記事
- 2022-11-24
- テクノロジー