middlewareとは
ユーザーからのリクエストがコントローラーに届く前後の間に別の処理を入れることができる機能
middlewareの種類
グローバルミドルウェア
全てのリクエストに処理を行うミドルウェア
Kernel に表記することで使用することができる。
ルートミドルウェア
特定のルートのみ対して適応するミドルウェア
web.php
Route::get('/signin',[MainController::class,'signin'])
->middleware(TestMiddleware::class)->name('signin');
コントローラーで設定する場合、
Kernel.phpの$middlewareAliasesの欄のエリアルを記入することで
そのエリアルを使用することができる。
Kernel.php
protected $middlewareAliases = [
'test' => \App\Http\Middleware\Test\TestMiddleware::class
];
web.php
Route::get('/signin',[MainController::class,'signin'])
->middleware('test')->name('signin');
コントローラーのコンストラクタに書いても使用することができる。
そうすることでコントローラー全体に処理を行うことができる。
また only , exceptを使用することで処理の有無を選択できる。
controller.php
public function __construct(){
$this->middleware('auth')->only(['index']); // `index` のみ適用
$this->middleware('auth')->except(['show']); // `show` 以外に適用
}
ミドルウェアグループ
複数のミドルウェアのまとめて、ルートに割り当てることができる。
web,apiにmiddlewareを登録することで処理が行われる。
Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\Middleware\TestMiddleware::class
],
'api' => [
],
];
web.php
Route::middleware(['web'])->group(function(){
Route::get('/signin',[MainController::class,'signin'])->name('signin');
Route::post('/signgin',[MainController::class,'signin_post'])->name('signin.post');
});