Передача параметров в middleware в фреймворк Laravel

предположим, у меня есть маршрут, указывающий на middleware;

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

}]);

и мой код промежуточного ПО выглядит следующим образом:

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

Если я хочу использовать $id в промежуточном по, как это сделать?

2 ответов


для доступа к параметру route в промежуточном ПО можно использовать один из следующих методов:

Первый Способ

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

этот метод вернет массив всех параметров.

Второй Способ

$request->route('parameter_name');

здесь parameter_name относится к тому, что вы назвали параметром в маршруте.


в вашем случае вы не можете пройти $id в промежуточное.

как правило, вы можете передавать параметры в промежуточное ПО с помощью : символ такой:

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

и получить переданный параметр в метод middleware следующим образом:

<?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 ()

надеюсь, что это помогает!