簡體   English   中英

Laravel - 如何通過路由組將變量傳遞給中間件?

[英]Laravel - How to pass variables to middleware through route group?

這是我的路線組,

Route::group(['middleware' => 'checkUserLevel'], function () {
                // my routes
            });

這是我的中間件checkUserLevel

public function handle($request, Closure $next, $level)
    {
        $user = Auth::user();
        if ($user->level > $level) {
            return redirect('testUrl');
        }

        return $next($request);
    }

我想將$level變量從路由組傳遞給中間件。 謝謝。

您可以簡單地使用冒號將多個參數傳遞給中間件。 像這樣使用它:

Route::group(['middleware' => 'checkUserLevel:some_value_of_level'], function () {
            // my routes
        });

現在,您可以在 $level 變量中使用此值。

public function handle($request, Closure $next, $level)
{
    $user = Auth::user();
    if ($user->level > $level) {
        return redirect('testUrl');
    }

    return $next($request);
}

這會有所幫助。


編輯:2018 年 12 月 14 日

您還可以將多個變量發送到中間件。 您只需要使用逗號 (,) 分隔值。

Route::group(['middleware' => 'checkUserLevel:some_value_of_level, one_more_value_to_send'], function () {
                    // my routes
});

您將在中間件處理程序中的$level之后的變量中獲得值one_more_value_to_send

public function handle($request, Closure $next, $level, $another_value)
{
   $user = Auth::user();
   if ($user->level > $level) {
      return redirect('testUrl');
   }

   return $next($request);
}

更多細節可以參考: Laravel 5.1 中將參數傳遞給中間件

在 Laravel 6.x 中,您必須像在中間件中一樣添加代碼

 public function handle($request, Closure $next,$module=null,$right=null)
    {
        dd($module,$right);
        return $next($request);
    }

你的路線代碼是這樣的

Route::get('/department/add', 'DepartmentController@addNew')->middleware('ManualSec:abc,xyz');

在 Kernel.php 中,在 $routeMiddleware 部分注冊您的中間件,例如

'ManualSec' => \App\Http\Middleware\ManualSec::class,

通過在我的情況下使用 url 調用路由

http://local.pms.com:8080/department/add

結果是這樣的:

在此處輸入圖片說明

現在你可以在你的中間件中編碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM