#laravel #middleware #laravel-5.3 #laravel-cashier
#laravel #промежуточное программное обеспечение #laravel-5.3 #laravel-кассир
Вопрос:
Я хочу настроить промежуточное программное обеспечение, чтобы проверить, является ли пользователь подписчиком страницы, на которой он находится. Я попробовал несколько вариантов, но оба потребовали передачи URL-адреса промежуточному программному обеспечению.
Маршрут
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);
}
Приведенный выше $subscribe, очевидно, возвращает строку {$id}, но я попытался объединить. Есть ли лучший способ?
Поскольку я использую Cashier и Stripe, я также попытался настроить новый план для каждого пользователя. Из документов.
public function handle($request, Closure $next)
{
if ($request->user() amp;amp; ! $request->user()->subscribed('main')) {
// This user is not a paying customer...
return redirect('billing');
}
return $next($request);
}
Но мне все равно нужно передать переменную в «main».
Ответ №1:
Я не уверен, что полностью понимаю ваше требование. Но чтобы получить значение некоторого параметра маршрута запросов, вы можете использовать функцию $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);
}