2016-12-05 29 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()方法

希望這有助於!