2016-09-30 4 views
0

übergeben möchte ich eine Middleware einrichten, um zu überprüfen, ob der Benutzer ein Abonnent der Seite ist, auf der sie sich befinden. Ich habe ein paar Optionen ausprobiert, aber beide mussten die URL an die Middleware übergeben.Ist es möglich, und wenn ja, wenn ich einen variablen Parameter an eine Middleware in Laravel

Die Strecke

Route::get('premium/{id}', function ($id) { 
    return $id; 
})->middleware('subscribe:{$id}'); 

Die Middleware

public function handle($request, Closure $next, $subscribe) 
    { 
     //dd($subscribe); 
     $c = DB::table('suscribes')->where('user_id', $request->user()->id)->where('subscribed_to', $subscribe)->count(); 

     return $next($request); 
    } 

Die oben $ gibt abonnieren offensichtlich eine Reihe von {$ id} sondern haben versucht, verketten. Gibt es einen besseren Weg?

Da ich Kasse und Streifen verwende, habe ich auch versucht, einen neuen Plan für jeden Benutzer einzurichten. From docs.

public function handle($request, Closure $next) 
{ 
    if ($request->user() && ! $request->user()->subscribed('main')) { 
     // This user is not a paying customer... 
     return redirect('billing'); 
    } 

    return $next($request); 
} 

Aber ich brauche noch die Variable 'main' zu übergeben.

Antwort

1

Ich bin mir nicht sicher, ob ich Ihre Anforderung vollständig verstehe. Aber um den Wert einiger Requests Route Parameter zu erhalten, können Sie $ request-> route ('param-identifier') Funktion verwenden. Die Übergabe von {$ id} als Parameter an die Middleware ist der falsche Ansatz.

public function handle($request, Closure $next, $subscribe) 
    { 
     dd($request->route('id')); 

     $c = DB::table('suscribes')->where('user_id', $request->user()->id)->where('subscribed_to', $subscribe)->count(); 

     return $next($request); 
    } 
Verwandte Themen