Oto Shavadze
Oto Shavadze

Reputation: 42763

Use custom middleware in controller

I created middleware: php artisan make:middleware CheckUserStatus

In this middleware I have:

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

Then, one of my controller I have:

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

This gives ReflectionException - Class CheckUserStatus does not exist

What I'm doing wrong ?

Upvotes: 0

Views: 523

Answers (3)

albus_severus
albus_severus

Reputation: 3702

You need to add your middleware in kernel.php

protected $routeMiddleware = [

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

Upvotes: 0

apokryfos
apokryfos

Reputation: 40663

You need to use the fully qualified class name:

Either:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

or

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
    }
}

Upvotes: 1

Pavel Lint
Pavel Lint

Reputation: 3527

You need to register your middleware if you want to reference it by a string key. Check out the docs here.

Alternatively, you could use the fully qualified class name: try CheckUserStatus::class instead of 'CheckUserStatus'.

Upvotes: 3

Related Questions