在 kernel.php 中列出中间件

Listing middleware in kernel.php

我有一个管理中间件AdminMiddleware.php

 public function handle($request, Closure $next, $guard = null)
    {
        if(Auth::check())
        {
            if($request->user()->is_admin==1)
            {
               return $next($request);
            }
             return redirect('/login');    
        }
        else
        {
          return redirect('/login');   
        }
    }

我在 adminmiddleware 下有一些路由:

Route::group(['middleware' => ['App\Http\Middleware\Adminmiddleware']], function () {
        //admin routes
        });

工作正常。我对 Registering middleware 有点困惑?我为什么要注册。仅用于别名或更有效的东西?

注册中间件会自动为每个请求加载 class。你告诉 Laravel 加载并注册它,这样你就可以在路由和控制器中使用它而无需手动初始化它。与控制台命令、服务提供商等相同。您必须在使用前注册。

If you want a middleware to run during every HTTP request to your application, simply list the middleware class in the $middleware property of your app/Http/Kernel.php class.

对于$routeMiddleware$middlewareGroups,它们主要用于别名。正如您提到的,您可以不注册它并在您的路由文件中使用它。

更多的是方便您根据需要交换实现。

IMO,注册它,这样你就可以在任何时候交换中间件实现,而无需进入你的路由配置文件来更改它——这比一个中央位置更改更容易出错。