【Laravel5.8】 Middlewareを使ってControllerを簡潔に書きたい
特定の変数を複数のアクションで用いる際にはMiddlewareを利用していきましょう!
Middlewareの作成
php artisan make:middleware HelloMiddleware
/app/Http/Middleware/にMiddlewareが生成されます。
Middlewareを編集
Middlewareが生成されたての時は以下のような状態になっています。
public function handle($request, Closure $next) { return $next($request); }
ここに変数などを書き加えていきましょう。
public function handle($request, Closure $next) { $hello = 'Hello, this is Middleware'; ★ $bye = 'Goodbye,Middleware'; ★ $data = [ 'hello'=>$hello, 'bye'=>$bye ]; ★ $request->merge($data); ★ return $next($request); }
気になるのはmergeというメソッドでしょうか。これは$requestに$dataの値を加えるメソッドです。変数などを書き加える以外はMiddlewareに任せてしまいましょう。
Controllerを編集
public function index(Request $request) // RequestでMiddlewareからの値を受け取る { $data = [ 'msg'=> $request->hello // 特定の変数をMiddlewareから出したい場合は$registetー>でOK ]; return view('hello.index', $data); }
web .phpにMiddlewareのルートグループを登録
Route::middleware([HelloMiddleware::class])->group(function() {
Route::get('/hello','HelloController@index');
});
見た目は難しいかもしれませんが、先ほど生成して追記したHelloMiddlewareの効果を及ばせたいルートをfunctionでくくっているだけです。