说实话自己在做项目的时候对中间件的印象不是很深,我对中间件这个词也不太理解。
文档记载,中间件是用来提供一种机制来对HTTP请求进行过滤的,参考上周使用throttle中间件来对网页进行访问流量控制的相关例子,大概对这个东西有了一点理解。但是还是边做边看吧。
中间件提供了一种方便的机制来检查和过滤进入应用程序的HTTP请求。例如判断用户是否经过身份验证,如果没有通过身份验证,那就重定义到之前的登录页面,不然就顺利登入程序。
定义中间件
使用php artisan make:middleware Xxx类似的语句在项目中添加一个中间件。
基本上类中定义的方法是用来处理请求的,像是请求中的参数满足条件可以正常访问,不满足重新定义到首页等。
还有前置和后置中间件之分。
包含和使用中间件
全局中间件需要在app\Http\Kernel.php中的$middleware属性下包含该中间件。

差不多是这个样子。
而给路由分配中间件,是在$routeMiddleware中添加,需要构建类似功能=>middleware的键值对。
然后用middleware()方法分配。
Route::get('admin/profile', function () {
//
})->middleware('auth');
还可以给路由分配多个中间件。
给一组中间件绑定一个键值,就是一个中间件组,可以按照上面讲的方法给路由分配中间件。
中间件执行任务可以在实际执行完之前,也可以在之后。
排除中间件,用withoutMiddleware,用的场景主要是,一组路由赋予了一个中间件,有一个路由用不到的情况。
可以在整个组路由中定义排除一组给定的中间件:
use App\Http\Middleware\EnsureTokenIsValid;
Route::withoutMiddleware([EnsureTokenIsValid::class])->group(function () {
Route::get('/profile', function () {
//
});
});
中间件组,有时候希望可以将多个中间件组合在一个键下,使得更容易分配给路由,可以使用middlewareGroup属性来完成操作。大概就是用建立数组的方法。
/**
* 应用程序的路由中间件组。
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
如何确定中间件的优先级,可以使用middlewarePriority属性来控制优先级。
总结
东西不多,主要是做一个请求处理的中间层。有些东西暂时用不上。