在控制器中使用自定义中间件

时间:2019-11-16 16:53:58

标签: php laravel laravel-5

我创建了中间件:php artisan make:middleware CheckUserStatus

在这个中间件中,我有:

namespace App\Http\Middleware;

use Closure;

class CheckUserStatus
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth()->check() AND Auth()->user()->status === 0) { // user is logged in but it is blocked
            auth()->logout();
            return redirect('/');
        }

        return $next($request);
    }
}

然后,我有一个控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Middleware\CheckUserStatus;


class productsController extends Controller
{
    public function __construct () {
        $this->middleware('auth');
        $this->middleware('CheckUserStatus');
    }
}

这给出了ReflectionException - Class CheckUserStatus does not exist

我做错了什么?

3 个答案:

答案 0 :(得分:3)

如果要通过字符串键引用中间件,则需要注册。选中out the docs here.

或者,您可以使用完全限定的类名:尝试使用// Force Gradle to load the JUnit Platform Launcher from the module-path testRuntimeOnly("org.junit.platform", "junit-platform-launcher") { version { strictly("[1.5, 2.0]") prefer("1.5.2") } because("my reason here.") } 而不是CheckUserStatus::class

答案 1 :(得分:1)

您需要使用完全限定的类名:

要么:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class productsController extends Controller
{
    public function __construct () {
        $this->middleware('auth');
        $this->middleware('\App\Http\Middleware\CheckUserStatus');
    }
}

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Middleware\CheckUserStatus;

class productsController extends Controller
{
    public function __construct () {
        $this->middleware('auth');
        $this->middleware(CheckUserStatus::class); //No quotes
    }
}

答案 2 :(得分:0)

您需要在kernel.php中添加中间件

protected $routeMiddleware = [

       'your_desire_name'=>\App\Http\Middleware\CheckUserStatus::class,
    ];