假设我有一条指向中间件的路由;将参数传递给Laravel中的中间件
Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {
}]);
我的中间件代码如下:
public function handle($request, Closure $next)
{
return $next($request);
}
如果我想在中间件使用$id
,我该怎么办呢?
假设我有一条指向中间件的路由;将参数传递给Laravel中的中间件
Route::get("/user/{id}", ['middleware' => 'auth', function ($id) {
}]);
我的中间件代码如下:
public function handle($request, Closure $next)
{
return $next($request);
}
如果我想在中间件使用$id
,我该怎么办呢?
您可以用下面的方法之一来访问路线参数在中间件:
第一种方法
$request->route()->parameters();
此方法将返回所有参数的数组。
$request->route('parameter_name');
这里parameter_name
第二种方法指的是什么,你叫路由中的参数。
在你的情况下,你不能通过$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
和 a$next closure
,有一个third parameter
,其中我我们的中间件 参数。如果您在多个参数传递给路由定义中间件 通话,只需添加更多的参数,你 handle()方法
希望这有助于!
你有'$ request'变量使用它:)('$ request-> id') – Kyslik