根据zend-framework中的定义:所谓中间件是指供应在要乞降相应之间的,能够截获要求,并在其根本上进行逻辑处理,与此同时能够完成要求的相应或通报到下一个中间件的代码。
前面比较晦涩,看看流程图,以laravel为例演示“删除评论”的要求周期(并非完全的要求周期,只为了让大家随意马虎理解):
要求周期
看完流程你会创造,上岸功能放在中间件后,掌握器的任务变得清晰多了,只是用来实行核心功能(删除评论)。但是也有人可能会认为:觉得流程变多了,开拓起来不是很慢吗?下面来回答这个问题。
为什么须要中间件?1.不须要中间件的场景
当我们开拓一个比较小的外包项目时,我们紧张考虑的是如何快速开拓完项目并交付,而不是考虑其日后的升级和扩展,业务逻辑也不是很繁芜,那么我们完备可以一个掌握器(controller)完成所有业务代码,这是没问题的,但是当我们做一个业务逻辑比较繁芜的项目呢?
2.须要中间件的场景
业务逻辑比较繁芜时,把所有业务代码都写在掌握器里就显得不太得当了,由于掌握器会非常臃肿,难以掩护,这个时候我们就须要对构造进行分层(service赞助controller,actions和Repositories赞助model,这些我会在其余的文章提到)、将cookie操作/用户权限验证等操作写到各自的中间件里,这样我们写出来的项目可掩护性就会大大提高。
中间件的实行顺序?1.中间件为什么会有实行顺序
假设场景:用户删除评论,我们须要验证用户是否上岸,评论删除成功往后须要记录这个业务的操作日志。
实行流程(只考虑核心流程):入口(index.php) > 验证上岸(中间件1) > 记录数据(中间件2) > 业务处理(掌握器) > 记录操作日志(中间件3) > 返回相应。
上面为什么会有3个中间件而不是两个中间件呢?答案是一样平常操作日志的记录一个中间件是无法完成的(可以考试测验想想一个中间件怎么实现),我们分别看看各个操为难刁难应的中间件。
验证用户是否上岸:中间件1;记录业务的操作日志:中间件2+中间件3;这3个中间件如果不区分实行顺序,那需求就无法实现了,这便是为什么中间件会有实行顺序。
2.前置中间件&后置中间件
这里提一下什么叫前置中间件跟后置中间件。
前置中间件:运用场置业务要求(controller)之前实行的中间件,上面例子中的中间件1和中间件2便是。
后置中间件:运用场置业务要求(controller)之后实行的中间件,对应的是中间件3。
总结我们在做小项目的时候不一定须要用到中间件,但是我们须要知道有这个东西,当我们以为掌握器很臃肿时我们可以考虑把用户认证/IP验证/历史记录等操作放到中间件中,以增强可掩护性。
laravel中间件的利用教程可以参考链接:https://learnku.com/docs/laravel/5.6/middleware/1364
我是搞技能的庄大叔,以上内容如果有误,请广大条友示正,点赞也行。