【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でくくっているだけです。