是否有可能以及如何将可变参数传递给 Laravel 中的中间件

Is it possible and how do I if so to pass a variable parameter to a Middleware in 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 明明是returns一串{$id}但是试过拼接。有没有更好的方法?

因为我在使用 Cashier 和 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'。

我不确定我是否完全理解您的要求。但是要获取某些请求路由参数的值,您可以使用 $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);
    }