Использование пользовательского промежуточного программного обеспечения в контроллере

Использование пользовательского промежуточного программного обеспечения в контроллере

16.11.2019 07:53:58 Просмотров 52 Источник

Я создал промежуточное по: 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

Что я делаю не так ?

У вопроса есть решение - Посмотреть?

Ответы - Использование пользовательского промежуточного программного обеспечения в контроллере / Use custom middleware in controller

Является ответом!
Pavel Lint

16.11.2019 08:04:14

Вам нужно зарегистрировать свое промежуточное программное обеспечение, если вы хотите ссылаться на него строковым ключом. Проверьте документы здесь.

Кроме того, вы можете использовать полное имя класса: попробовать CheckUserStatus::class вместо 'CheckUserStatus'.

apokryfos

16.11.2019 08:06:54

Необходимо использовать полное имя класса:

Любой:

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
    }
}
https://stackoverflow.com/questions/58893039/use-custom-middleware-in-controller/58893160#comment104051547_58893160
Большое спасибо
albus_severus

16.11.2019 08:10:41

Вам нужно добавить промежуточное ПО в ядро.РНР

protected $routeMiddleware = [

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

Закрыть X