2016-12-05 80 views
8

假设我有一条指向中间件的路由;将参数传递给Laravel中的中间件

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

}]); 

我的中间件代码如下:

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

如果我想在中间件使用$id,我该怎么办呢?

+3

你有'$ request'变量使用它:)('$ request-> id') – Kyslik

回答

7

您可以用下面的方法之一来访问路线参数在中间件:

第一种方法

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

此方法将返回所有参数的数组。

$request->route('parameter_name');

这里parameter_name

第二种方法指的是什么,你叫路由中的参数。

4

在你的情况下,你不能通过$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()方法

希望这有助于!