2016-09-30 4 views
0

Я хочу создать промежуточное программное обеспечение, чтобы проверить, является ли пользователь подписчиком на странице, на которой они находятся. Я попробовал несколько вариантов, но оба они нуждались в передаче URL-адреса в Middleware.Возможно ли это, и как это сделать, чтобы передать переменный параметр промежуточному программному обеспечению в 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); 
    } 

Вышеприведенные $ подписываться очевидно возвращает строку {$ ид}, но попытались конкатенации. Есть ли способ лучше?

Как я использую Cashier and Stripe Я также попытался создать новый план для каждого пользователя. 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

Я не уверен, полностью ли я понимаю ваше требование. Но чтобы получить значение некоторого параметра route Requests, вы можете использовать $ request-> route ('param-identer'). Пропуск {$ 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); 
    } 
Смежные вопросы