轻松使用Laravel6中间件
一、什么是中间件?
**什么是Laravel的中间件?**简而言之就是一套过滤所有HTTP请求的机制。
解释:
1) 一个HTTP请求(URL)发起时,经过路由之后会被分发到中间件,中间件这里就可以拦截路由进行判断,符合要求才会允许访问路由对应的方法。
2)听起来还是有些懵,下面举个例来理解。
一个房子所对应进出房子的大门,你是房子的主人,你下班回家,到了门口掏出钥匙,门锁就会判断你这个钥匙是不是我这把锁的钥匙,如果是,门锁就会放行,打开门,让你进去,进入家后,想干嘛就干嘛。如果门锁验证你的钥匙不对,就会发出在中间件中定义好的操作,比如,年轻人,你这把钥匙不是我这把锁的,哪来就回哪去吧。
再来梳理一下这个流程,你就是用户,你拿起钥匙开锁就是发起一个请求,门锁就是中间件,判断你这个钥匙对不对,验证钥匙通过过,打开门就是对应的控制器方法。验证不通过就对应着我们在中间件所定义的操作。
二、定义中间件
这里不深入源码,只写如何使用中间件。
php artisan make:middleware TestA
该命令会在app/Http/Middleware目录下生成一个TestA的类文件,这就是中间件文件,且是一个前置中间件。
三、编写中间件逻辑
如,判断用户是否登陆,未登陆重定向到首页
public function handle($request, Closure $next)
{
if(!session('name')){
return redirect('/');
}
return $next($request);
}
四、注册中间件 app/Http/Kernel.php
编辑 app/Http/Kernel.php 文件在 $routeMiddleware属性中添加
protected $routeMiddleware = [
... // 省略原有的中间件代价
'testa' => \App\Http\Middleware\TestA::class,
];
到这里中间件就定义好了,可以在路由中使用了。
补充:
1) 前置中间件,就是在对应的控制器方法之前执行
cookie验证:验证用户的cookie
用户角色验证:定义不同的用户角色并验证
用户权限验证:配置不同的用户权限,并验证安全相关,如CSRF校验:CSRF校验中间件
http方法过滤:过滤特定的GET POST请求
http或者page cache:对指定路径的页面进行缓存
跨域中间件:不用在nginx配置,而是通过框架的方式,针对某些域名或某些请求,提供跨域的服务。
2) 后置中间件,就是在对应的控制器方法执行之后执行
共同数据输出:针对统一业务的公共数据,在后置中统一输出更新日志
3) protected $middleware,全局中间件,无论执行什么请求一定会执行该中间件
4) protected $middlewareGroups,中间件组 5) protected $routeMiddleware,路由中间件,只有在定义路由的时候才会使用。我们这里使用的就是路由中间件
五、使用中间件
创建控制器
php artisan make:controller TestaController
定义路由 app/routes/web.php
Route::get('testa/seta' , 'TestaController@setA');
Route::get('testa/a' , 'TestaController@A')->middleware('testa');
Route::get('testa/b' , 'TestaController@B')->middleware('testa');
定义控制器方法
public function setA() { session(['name'=>'李四']); }
public function A() { return 'A方法,登陆后才能看到我~~'; }
public function B() { return 'B方法,登陆后才能看到我~~'; }
中间件到这里就完成了,再补充一点,后置中间件,如上面的步骤几乎都是一样的,唯一不同的就是中间件的方法。下面就是一个后置中间件的案例。
public function handle($request, Closure $next)
{
$response = $next($request);
Log::info('我实在请求之后执行的');
return $response;
}
我是夕阳何处寻,期待和优秀的你一起同行!
夕阳何处寻
2019年10月22