2016-12-05 7 views
8

Angenommen, ich habe eine Route, die auf Middleware verweist;Übergeben von Parametern an Middleware in Laravel

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

}]); 

Und meine Middleware-Code ist wie folgt:

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

Wenn ich $id in der Middleware verwendet werden soll, wie kann ich das tun?

+3

Sie haben '$ request' Variable verwenden Sie es :) (' $ Anfrage-> ID') – Kyslik

Antwort

7

Sie können eines der folgenden Verfahren verwenden, um den Routenparameter in einer Middleware zuzugreifen:

Erste Methode

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

Diese Methode wird eine Anordnung aller Parameter zurück.

Zweite Methode

$request->route('parameter_name');

Hier parameter_name bezieht sich auf das, was Sie die Parameter in der Route genannt.

4

In Ihrem Fall können Sie nicht $id in die Middleware übergeben.

Generell können Sie Parameter übergeben über mit : Symbolen wie diese Middleware:

Route::get('user/{id}', ['middleware' => 'auth:owner', function ($id) { 
    // Your logic here... 
}]); 

Und die übergebenen Parameter in Middleware-Methode wie folgt erhalten:

<?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'); 
    } 
} 

Beachten Sie, dass die handle() Methode , die normalerweise nur eine $request und eine $next closure, hat eine third parameter, die i s unsere Middleware Parameter. Wenn Sie in mehreren Parametern zu Middleware Anruf in der Routendefinition übergeben, fügen Sie einfach weitere Parameter zu Ihrem handle() Methode

hoffe, das hilft!

Verwandte Themen