Передача параметров в 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 ()
надеюсь, что это помогает!