Возможно ли и как мне, если да, передать переменный параметр промежуточному программному обеспечению в Laravel

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