laravel的中间件
什么是中间件
中间件是一个轻量级、底层的插件系统,可以介入应用主题从请求到响应的处理过程。
从网上扒的一张中间件的示意图
说明白点,中间件其实就是一个闭包,而且返回一个闭包。中间件为过滤进入应用的HTTP请求提供了一套便利的机制,常用于验证用户是否经过认证,添加响应头(跨域),记录请求日志等。
用到的一些概念
1.闭包函数
也就是常说的匿名函数(什么是匿名?没有函数名不就是匿名了么...秀- -),允许临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。
PHP中的匿名函数:PHP在5.3的版本之后支持了匿名函数,并统归属于Closure类下,通过Closure类来实现。那这就给我们在判断匿名函数时带来一定的好处了(稍后代码体现)。
2.函数式编程
关于这一块,推荐阮一峰老师的一篇博文 ---《函数式编程初探》
理解了这两个关键点之后,我们就开始开搞啦~
简单的代码实现
思路
1.定义一个处理中间件的函数,负责不断返回中间件的处理结果给下一个中间件
2.绑定的中间件函数,这里我用了一个简单的数组去实现这种绑定,目的在于第三部执行时,遍历这个数组按添加顺序一个个执行
3.执行函数,负责总的请求数据输入,以及最终响应结果的返回,中间按绑定中间件的顺序不断的执行第一步中的函数
以上就是我为实现此次PHP中间件简单实现的一个思路,下面是代码实现。
demo类
调用
把以上代码放在了一个名为demo.php的文件,执行一下,
总结
这篇文章只是讲了中间件最简单和基础的东西,PHP框架中,中间件做的比较突出的,非laravel莫属了,感兴趣的同学可以去扒他的 IlluminateRoutingRouter 源码研究一下。
<?php
namespace TerryLin\Middleware;
use Closure;
/**
* PHP中,中间件概念的简单实现
*
*/
Class Demo
{
//响应的数据
public $response;
//绑定的中间件
private $stack = [];
/**
* 执行中间件函数
* @param mix $request 请求数据
* @param mix $response 响应数据
* @param Closure $next 把处理完的结果返回给下一个中间件
* @return Closure
*/
private function handle( $request, $response, Closure $next )
{
return $next($request,$response);
}
/**
* 绑定中间件
*/
public function bind(Closure $middleware)
{
$this->stack[]=$middleware;
return true;
}
/**
* 执行函数
* @param mix $request 请求数据
* @param mix $response 响应数据
* @return mix
*/
public function run($request,$response='')
{
$this->response = $response;
foreach ($this->stack as $key => $value)
{
$this->response = $this->handle($request,$this->response,$value);
}
return $this->response;
}
}
$demo = new Demo();
$demo->bind(
function($requset,$response){
$response = $response.$requset.'filter By middleware!';
return $response;
});
var_dump( $demo->run('someQueryParams') );
Tags : 本文未设置标签
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站大部分内容收集于互联网,如果有侵权内容、不妥之处,请联系删除。敬请谅解!