当前位置: 首页 > 后端技术 > PHP

Laravel的中间件深入解析

时间:2023-03-30 01:38:57 PHP

什么是Laravel中间件?总之,中间件在laravel中的作用就是对HTTP请求进行过滤,根据不同的请求进行不同的逻辑操作。我们可以通过中间件实现以下功能:指定某些路由,设置HTTP响应头,记录请求过滤请求参数,判断是否开启站点维护模式,响应前后做一些必要的操作。自定义中间件命令行并执行以下简单命令。轻松创建一个新的中间件phpartisanmake:middleware//MiddlewareName是你要创建的中间件的名字执行上面的命令,Laravel会自动在app/Http/Middleware目录下创建一个handle方法中间件。[\App\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::类,//\Illuminate\Session\Middleware\AuthenticateSession::类,\Illuminate\View\Middleware\ShareErrorsFromSession::类,\App\Http\Middleware\VerifyCsrfToken::类,\Illuminate\Routing\Middleware\SubstituteBindings::C姑娘,],'api'=>['throttle:60,1','bindings',],];/***应用程序的路由中间件。**这些中间件可以分配给组或单独使用**@vararray*/protected$routeMiddleware=['auth'=>\Illuminate\Auth\Middleware\Authenticate::class,'auth.basic'=>\Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,'bindings'=>\Illuminate\Routing\Middleware\SubstituteBindings::class,'can'=>\Illuminate\Auth\Middleware\Authorize::class,'guest'=>\App\Http\Middleware\RedirectIfAuthenticated::class,'throttle'=>\Illuminate\Routing\Middleware\ThrottleRequests::class,//刚刚创建的中间件'superadmin'=>\App\Http\Middleware\RedirectIfSuperAdmin::class,];}$middleware数组包含全局中间件,它运行对应用程序的每个HTTP请求,所以如果你想为每个请求运行一个中间件,你应该在这里注册它。$middlewareGroups使得以组的形式注册中间件成为可能,从而可以更容易地使用组名将大量中间件附加到路由。$routeMiddleware数组包含每个已注册的路由中间件。分配中间件有两种主要方法可以将已注册的中间件应用于路由。通过controller的构造方法通过构造方法路由分配中间件有很大的灵活性。它提供了两个重要的方法except($parameters)和only($parameters)。这两个方法可以允许或阻止中间件应用于控制器的辅助方法。如果不使用这两个方法,中间件将使用控制器的每个方法。middleware('auth');}publicfunctionviewForum(){returnview('index');}publicfunctionedit($id){}publicfunctiondelete($id){}}使用except和only方法我们可以选择将中间件应用于指定方法。如下所示:使用only()*/$this->middleware('auth')->except(['viewForums','viewForumDetails']);}publicfunctionviewForums(){returnview('index');}publicfunctionedit($id){}publicfunctiondelete($id){}publicfunctionviewForumDetails(){}}通过路由分发中间件如果注册的中间件可以直接附加到路由上,如下图:middleware('auth');/**方法2或像这样使用完全限定的类名:*/useApp\Http\Middleware\CheckAge;Route::get('admin/profile',function(){//action})->middleware(CheckAge::class);//方法3Route::group(['middleware'=>['web']],function(){//action});N:B中间件组可以像单个中间件一样分配路由中间件参数,其他参数可以传递给中间件。一个典型的例子是为每个用户ID分配一个角色,中间件检查用户的角色以确定他们是否被授权访问所请求的URI。可以向中间件传递参数,如下所示:middleware('auth:');//这里应该替换为用户想要传递的任何参数。//方法2(通过控制器)useIlluminate\Http\Request;classForumControllerextendsController{publicfunction__construct(){$this->middleware('auth:');通过分隔每个参数,可以将多个参数传递给中间件。middleware('auth:,,');//这里的,,应该替换成用户想传递的任何参数。这些参数在$next变量之后传递给中间件的handle函数>>架构师成长路线【免费获取视频和面试资料】