ミドルウェアは、リクエストを受け取るとコントローラ処理の前後に割り込み、独自の処理を追加する仕組みです。
ミドルウェアとは
MVCアーキテクチャとは、モデル・ビュー・コントローラがそれぞれ切り離されています。プログラムの基本部分はコントローラですが、コントローラはそれぞれのアクションごとに処理を用意しております。
Laravelはコントローラとは別で「指定のアドレスにリクエストが送られたら、自動的に何らの処理を行う」という仕組みを用意しました。それがミドルウェアです。
ミドルウェアはリクエストがアクションに届く前や後に割り込んで処理を実行します。
ミドルウェアを作成する
実際にミドルウェアを作成してみましょう。ミドルウェアはスクリプトファイルを手作業で作成すれば、作れますがもっと簡単に作成したい場合は、artisanコマンドを使用しましょう。
サンプルとして「LaravelMiddleware」という名前で作榮してきましょう。
1 |
php artisan make:middleware LaravelMiddleware |
LaravelMiddleware.phpを確認する
ミドルウェアは「Http」の中の「Middleware」の中に作成されます。このフォルダに既にいくつかフォルダが入っていますが、標準で入っているものですので、気にしないでください。
では、「Middleware.php」を開いてください。以下のスクリプトが記述されています。
1 2 3 4 5 6 7 8 9 10 |
<?php namespace App/Http/Middleware; use Closure; class LaravelMiddleware { public function handle($request, Closure $next) { return $next($request); } } |
作成されたLaravelMiddkewareは特になにかのクラスを継承しているわけではないですし、シンプルなクラスです。
では次にLaravelMiddlewareの修正をしていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php namespace App/Http/Middleware; use Closure; class LaravelMiddleware { public function handle($request, Closure $next) { $data = [ ['name'=>'lara', 'mail'=>'lara@mail.com'], ['name'=>'vel', 'mail'=>'vel@mail.com'], ['name'=>'taro', 'mail'=>'taro@mail.com'], ]; $request->merge(['data'=>$data]); return $next($request); } } |
これでLaravelMiddlewareが登録され、利用可能になります。
ミドルウェアの実行
作成されたミドルウェアはまだ利用することができません。これを使用するには「利用するミドルウェアを呼び出す処理」が必要になってきます。
web.phpを開き、ルート情報にミドルウェアの呼び出し処理を追記してみてください。
1 2 3 4 |
// use App\Http\Middleware\Laravelmiddleware Route::get('laravel','laravelController@index') ->middleware(LaravelMiddleware::class); |
では、追記できましたら、次はビューとコントローラの修正です。
ビューとコントローラの修正
まずはコントローラの修正です。
該当コントローラに下記の記述をしてください。
コントローラは下記で説明しているので、こちらも確認してみてください。
https://laravel-times.com/index.php/2021/04/29/controller/
1 2 3 4 |
public function index(Request $request) { return view('laravel.index',['data'=>$request->data]); } |
続いてテンプレート側の修正を行いたいと思います。index.blade.phpに記述してある@section(‘content’)のディレクティブを修正しましょう。
1 2 3 4 5 6 7 |
@section('content') <table> @foreach($data as $item) <tr><th>{{$item['name']}}</th><td>{{$item['mail']}}</td></tr> @endsection </table> @endsection |
ミドルウェアに追加されたデータが表示されるようになるかと思います。
実際に/laravelにアクセスして表示確認を行ってみてください。