LoginSignup
39
40

More than 5 years have passed since last update.

[Laravel5] Middlewareで取得した値をControllerで使う方法

Posted at

概要

Laravel5から使える機能にMiddlewareがあります。
Controllerの前処理、後処理を実装する時に使うやつです。

前処理をするMiddlewareで取得した値をviewに渡すのはView::shareを使って簡単にできたのですが、Controllerに渡すのに手こずったので、備忘録として記録しておきます。

やり方

まずMiddlewareクラスを作成します。
今回はDBから適当な値を取得して、Controllerに渡すようにしています。

Controllerに値を渡すためには、handleに渡ってくるrequestインスタンスに配列を追加しているところがすべてです。
requestインスタンスはController側で引き継がれるのでController側で値を取り出すことができます。

HogeMiddleware
<?php

namespace App\Http\Middleware;

use Closure;

class HogeMiddleware
{

    public function handle($request, Closure $next)
    {
        // オブジェクトを取得
        $hoge = Hoge::find(10);
        $request->merge(['hoge' => $hoge]);

        return $next($request);
    }
}

作成したMiddlewareを使用できるように、Kernel.phpクラスに、作成したMiddlewareのrouteを追加

Kernel.php

    protected $routeMiddleware = [
        // この1行追加
        'hoge' => 'App\Http\Middleware\HogeMiddleware'
    ];

最後にControllerで使われるように、コンストラクタでMiddlewareを呼び出します。

HogeController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HogeController extends Controller
{

    public function __construct()
    {
        // 作成したMiddlewareを呼び出し
        $this->middleware('hoge');
    }

    // RequestインスタンスをInject
    public function show(Request $request)
    {
        // Requestインスタンスから、Middlewareでセットした値を取得
        $hoge = $request->hoge;

        return response()->json($hoge);
    }

若干分かりづらいかもしれませんが、
このようにして値をMiddlewareからControllerに受け渡すことができました。

参考

39
40
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
40