2016-12-05 25 views
8

Ara katman yazılımını gösteren bir rota olduğumu varsayalım;Laravel'de middleware'e parametreler geçiyor

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

ben katman içinde $id kullanmak istiyorsanız, bunu nasıl yapacağım şu şekildedir:

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

}]); 

Ve katman kodudur?

+3

'$ request' değişkeniniz buna sahiptir :) (' $ request-> id') – Kyslik

cevap

7

Bir katman rota parametresini erişmek için aşağıdaki yöntemin birini kullanabilirsiniz:

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

Bu yöntem

İlk Yöntem tüm parametrelerin bir dizi döndürür.

İkinci Yöntemi Burada parameter_name

$request->route('parameter_name');

rotadaki parametre dediği ifade eder.

4

Siz durumda $id ara yazılımına geçemezsiniz.

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

Ve böyle katman yönteme geçirilen parametre almak:

Genellikle böyle : sembolü kullanarak yoluyla katman için parametreleri geçirebilirsiniz

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

Not olduğunu handle() yöntem Genellikle sadece $request ve bir $next closure alır, bir third parameter vardır, ben bizim middleware parametresidir. Rota çözünürlükle katman çağrısına birden parametrelerde geçtiği takdirde, sadece kolu() yöntemine bu yardımcı olur

Umut daha fazla parametre ekleyin!