web-dev-qa-db-ja.com

Laravelでミドルウェアにパラメーターを渡す

ミドルウェアを指すルートがあるとします。

Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {

}]);

そして、私のミドルウェアコードは次のとおりです。

public function handle($request, Closure $next)
{
    return $next($request);
}

ミドルウェアで$idを使用したい場合、どうすればよいですか?

12
athene

以下のいずれかの方法を使用して、ミドルウェアのルートパラメーターにアクセスできます。

最初の方法

$request->route()->parameters();

このメソッドは、すべてのパラメーターの配列を返します。

2番目の方法

$request->route('parameter_name');

ここに parameter_nameは、ルートでパラメーターと呼ばれるものを指します。

16
Amit Gupta

あなたの場合、_$id_をミドルウェアに渡すことはできません。

通常、次のような_:_シンボルを使用して、ミドルウェアにパラメーターを渡すことができます。

_Route::get('user/{id}', ['middleware' => 'auth:owner', function ($id) {
    // Your logic here...
}]);
_

そして、渡されたパラメーターを次のようなミドルウェアメソッドに取得します。

_<?php

namespace App\Http\Middleware;

use Closure;

class Authentication
{
    public function handle($request, Closure $next, $role)
    {
        if (auth()->check() && auth()->user()->hasRole($role)) {
            return $next($request);
        }

        return redirect('login');
    }
}
_

handle()メソッドは、通常_$request_と_$next closure_のみを使用し、ミドルウェアパラメーターである_third parameter_を持っていることに注意してください。ルート定義でミドルウェア呼び出しに複数のパラメーターを渡した場合は、handle()メソッドにパラメーターを追加するだけです

お役に立てれば!

12
Saumya Rastogi