Php 用于订阅的Laravel中间件

Php 用于订阅的Laravel中间件,php,laravel-5,laravel-middleware,Php,Laravel 5,Laravel Middleware,我正在尝试用Laravel5编写中间件,它将检查用户是否有订阅,并且没有取消订阅。如果它不存在或被取消,那么它们将被锁定到一个页面(账单)。问题是,我最终进入了一个重定向循环。我明白为什么,但我就是不知道该怎么做。提前谢谢 public function handle($request, Closure $next) { if (\Auth::check()) { // if subscription does not exist if (\

我正在尝试用Laravel5编写中间件,它将检查用户是否有订阅,并且没有取消订阅。如果它不存在或被取消,那么它们将被锁定到一个页面(账单)。问题是,我最终进入了一个重定向循环。我明白为什么,但我就是不知道该怎么做。提前谢谢

public function handle($request, Closure $next)
{


    if (\Auth::check()) 
    {
        // if subscription does not exist
        if (\Auth::user()->hospital->subscription == null || \Auth::user()->hospital->subscription !== 'Active') {
           return redirect('billing');
        }

    }
    return $next($request);
}
问题是,我最终进入了一个重定向循环

看起来您正在整个应用程序(包括计费页面)中应用中间件。因此,您需要指定应该考虑中间件类的位置,这可以在
/app/Http/kernel.php
上实现

此外,您还可以考虑在中间件clas上进行额外的验证,如:

// billing (http://example.com/billing)
$path = $request->path();

if ($path !== 'billing')
{

    if (\Auth::check()) 
    {
        // if subscription does not exist
        if (\Auth::user()->hospital->subscription == null || \Auth::user()->hospital->subscription !== 'Active') {
           return redirect('billing');
        }

    }
}
return $next($request);

你好“账单”是什么?它就在你的路线上。你能试试这样的方法吗,return Redirect::route('billing');这就是让我脱离重定向循环的诀窍。我在整个应用程序中都有它,但现在我可以这样认为它是一个问题。尽管我现在被锁定在账单页面,但即使我输入付款信息,它也会运行订阅检查,这将导致它不断返回账单页面。不确定最好的方法是什么。最好的方法是编辑内核文件。为什么?因为您可以指定应用中间件类的url/路由。表达式
if($path!=='billing')
只是一个补丁,但不是推荐的解决方案。请阅读一下laravel文档中的中间件类,它对如何使用它们有很好的解释。最后,如果您需要帮助,我们很乐意为您提供帮助。最后,我为中间件设置了一个路由组,以便它不会应用于整个应用程序。谢谢你的帮助。非常感谢。