0

我希望设置一个中间件来检查用户是否是他们所在页面的订阅者。我尝试了几个选项,但都需要将 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() && ! $request->user()->subscribed('main')) {
        // This user is not a paying customer...
        return redirect('billing');
    }

    return $next($request);
}

但我仍然需要将变量传递给'main'。

4

1 回答 1

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);
    }
于 2016-09-30T09:04:04.333 回答