laravel5.8(二)中间件
一:概念:什么是中间件:
中间件,顾名思义就是在中间,在什么中间?laravel的中间件就是在路由和控制器中间。其实就是将程序解耦,比如laravel的中间件可以过滤、判断HTTP请求,当然这部分如果放在控制器也是可以的,但如果用中间件的方式,整个程序更加清晰,更加方便,也更利于维护。中间件判断一些请求,做一些特殊的事情,控制器安心搞具体的业务逻辑。
二:中间件可以做哪些事情?
1:指定路由
2:过滤指定的http参数
3:权限认证
4:记录日志等等
三:laravel中间件使用流程
1:定义中间件
2:注册中间件
3:使用中间件
四:中间件的具体使用步骤
1:定义中间件
php artisan make:middleware CheckAge //定义一个CheckAge中间件这样就在app\Http\Middleware目录下生成了一个CheckAge.php中间件文件。
注意使用artisan命令的时候,需要在artisan的当前目录,或者指定artisan路径
这个文件打开看一下,现在是这样的
<?php namespace App\Http\Middleware; use Closure; class CheckAge { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { return $next($request); } }我们稍微改一下:
<?php namespace App\Http\Middleware; use Closure; class CheckAge { /** * 处理传入的请求 * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // 这里写逻辑,判断传过来的age参数,如果小于等于18,我们认为这个人太小了,不能注册我们网站 if ($request->age <= 18) { echo '年纪太小了'; } return $next($request); } }
2:注册中间件和使用中间件,这两个地方一起来讲
在哪里注册:app/Http/Kernel.php,打开看下,这里面有4个方法:
1:protected $middleware //全局中间件,所有请求中间件都会执行
2:routeMiddleware //路由中间件,也就是和路由结合起来使用:
//我们刚才定义了CheckAge中间件,这里就这样注册 protected $routeMiddleware = [ ... 'CheckAge' => \App\Http\Middleware\CheckAge::class, ]; //然后怎么使用?这里就是路由应用 Route::get('/register/{age}',function($age=''){ //echo $age; })->middleware('CheckAge');
打开访问一下:
3:protected $middlewareGroups //路由中间件组,如果路由要用多个中间件,假设现在要用10个中间件,按照2的方法就比较麻烦,也不直观,难道我们添加10个路由?所以就用分组的形势,这个默认有两组,web和api
Route::group(['middleware' => 'api'],function(){ $route->get('hello/laravel',function(){}); $route->get('hello/php',function(){}); …… // 里面所有的路由都访问api路由组 });4:protected $middlewarePriority 排序中间组:特殊情况下,可能需要中间件以特定的顺序执行,但是当它们被分配到路由时,你无法控制它们的顺序。在这种情况下,可以使用 app/Http/Kernel.php 文件的 $middlewarePriority 属性指定中间件优先级: