2016-09-30 14 views
0

ミドルウェアを設定して、ユーザが自分がいるページのサブスクライバであるかどうかを確認したいと考えています。私はいくつかのオプションを試しましたが、どちらもURLをミドルウェアに渡す必要があります。上記$は明らか加入Laravelのミドルウェアに変数パラメータを渡すことが可能かどうか。

ルート

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

ミドルウェア

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

は、{$のID}の文字列を返すが、連結しようとしています。より良い方法がありますか?

私はキャッシャーとストライプを使用しているので、私は各ユーザーのために新しい計画を立ててみました。 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); 
} 

しかし、変数を 'main'に引き渡す必要があります。

答えて

1

あなたの要件を完全に理解しているかどうかはわかりません。しかし、いくつかのRequestsルートパラメータの値を取得するには、$ request-> route( 'param-identifyer')関数を使用できます。 {$ id}をパラメータとしてミドルウェアに渡すのは間違ったアプローチです。

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); 
    } 
関連する問題