浅谈Laravel中的三种中间件的作用


Posted in PHP onOctober 13, 2019

在之前一直简单的认为中间件就是往middleware里添加中间件即可。现在才知道中间件有三种类型,分别为:$middleware $middlewareGroup $routeMiddleware 通过查阅资料,终于明白了这三种类型的作用和不同。

第一种,全局中间件/$middleware:

我们的每一次请求,这里面的每个中间件都会执行。

第二种,路由中间件/$routeMiddleware:

定义在该属性内的中间件,只能在定义路由的时候引用。

假设这是我们定义的路由中间件:

protected $routeMiddleware = [
 ...
 'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
];

如果我们要使用\Illuminate\Auth\Middleware\Authenticate::class这个中间件就应该这样来写:

Route::get('hello/laravel-china','XXController@index')->middleware('auth');

定义路由时候调用middleware方法,参数值是auth, 这样访问这个路由的时候,就会执行该中间件。

第三种,中间件组/$middlewareGroups:

看上边的路由中间件,我们可以感觉到这样添加路由中间件是很麻烦的事,如果我们要执行100个中间件,那就要在定义路由时候添加100个。但有了中间件组就不用这么麻烦了!我们来看下中间件组是怎么定义的。

protected $middlewareGroups = [
 'web' => [
 \App\Http\Middleware\EncryptCookies::class,
 ...
 ],
 'api' => [
 ...
 ],
];

上面的例子就是定义中间件组的格式,比如 web这个键值,它对应为一个数组,该数组有多个中间件组成。

需要声明路由的时候,如下调用就可以了。

Route::group(['middleware' => 'web'],function($route){
 $route->get('hello/world',function(){});
 $route->get('hello/php',function(){});
 // 这样在访问这个这些路由的时候,就会执行中间件组 web 所对应的中间件!
});

**总结:

$middleware/全局中间件,要对所有的请求要做一些处理的时候,就适合定义在该属性内。(比如统计请求次数这些)

$middlewareGroups/中间件组,比如我们项目有api请求和web的请求的时候,就要把两种类型的请求中间件分离开来,这时候就需要我们中间件组啦。

$routeMiddleware/路由中间件,有些个别的请求,我们需要执行特别的中间件时,就适合定义在这属性里面。**

以上这篇浅谈Laravel中的三种中间件的作用就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHPMailer 中文使用说明小结
Jan 22 PHP
PHP中的float类型使用说明
Jul 27 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 PHP
PHP中SQL查询语句的id=%d解释(推荐)
Dec 10 PHP
搭建自己的PHP MVC框架详解
Aug 16 PHP
详细解读php的命名空间(一)
Feb 21 PHP
php的扩展写法总结
May 14 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 PHP
laravel config文件配置全局变量的例子
Oct 13 #PHP
Laravel 读取 config 下的数据方法
Oct 13 #PHP
laravel实现前后台路由分离的方法
Oct 13 #PHP
Laravel数据库读写分离配置的方法
Oct 13 #PHP
Laravel第三方包报class not found的解决方法
Oct 13 #PHP
php7性能提升的原因详解
Oct 13 #PHP
php抽象方法和普通方法的区别点总结
Oct 13 #PHP
You might like
PHP 常用函数库和一些实用小技巧
2009/01/01 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
PHP学习之数组值的操作
2011/04/17 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
php保存任意网络图片到服务器的方法
2015/04/14 PHP
php实现数字补零的方法总结
2018/09/12 PHP
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
vue打包通过image-webpack-loader插件对图片压缩优化操作
2020/11/12 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
python读取Android permission文件
2013/11/01 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
在python image 中实现安装中文字体
2020/05/16 Python
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
澳大利亚网上玩具商店:Mr Toys Toyworld
2018/03/25 全球购物
智能电子应届生求职信
2013/11/10 职场文书
红旗方阵解说词
2014/02/12 职场文书
初中学校军训方案
2014/05/09 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书