你以为你了解 Laravel 中间件
中间件是计算机中经常出现的一个名词,定义是比较宽泛的。我觉得中文还是比较好理解的,“中间”+“件”,是为了解决某一类问题,写在软件与软件之间的软件。
而在 Laravel 框架中,是一种框架的扩展机制。很多初学者不明白的原因是,这部分代码是写在框架中的,看不到这部分代码让中间件这概念不是很好理解。在这篇文档中,我会写一个最小的框架,并加入中间件最简单的实现来帮助你理解什么是中间件。
但是并不描述,在 Laravel 中如何使用中间件,这部分可以参考官方文档。
实现一个最简单的框架
首先,框架最基础的功能是什么?当然是实现路由,从多入口转为单一入口机制,让代码更合理地组织在一起。所以,我们通过三两行代码实现路由,实现最简单的框架:
$route = $_GET['s'];
$route();
function hello()
{
echo 'Hello';
}
当我们访问: http://localhost/index.php?s=hello
的时候,你就可以在页面上看到 Hello 的输出了。两行代码完成了框架的实现,并写了一个 hello
的接口。
接下去就可以实现中间件了, 在这个框架中。
实现中间件
中间件是一种扩展机制, 让开发者可以在框架运行期间插入自己的代码,比如执行接口代码之间去校验参数、权限、写入日志等。
$route = $_GET['s'];
foreach (include "middlewares.php" as $middleware) {
$middleware();
}
$route();
function hello()
{
echo 'Hello';
}
function logging()
{
echo 'logging';
}
上面的代码中,引入了 middlewares.php
,代码如下:
<?php
return ['logging'];
这样当我们执行 hello
代码之前,会先执行 logging
方法。这就是中间件。
总结
如果只是混口饭吃,并不需要了解原理。如果是出于兴趣,知根知底会让自己更快乐。这篇文档通过编写一个简单的框架并加入中间件机制来让初学者快速了解中间件这一个概念。
上面的示例代码,我并没有用面向对象的方式来写,一方面是出于示例尽可能简单的考虑,另一方面是想说面向对象是一种思想,了解了思想,怎么写其实无所谓。
本作品采用《CC 协议》,转载必须注明作者和本文链接
这也太简单了吧 :confused:
个人感觉这是取巧,算不上中间件
你是认真的?
我就当抛砖引玉,如果让你去实现中间件机制,你会怎么实现?是简单的实现,还是复杂的实现?中间件在 PHP 框架中,本质就是一种代码扩展机制,换一个名词也可以,比如在 ThinkPHP 中的前置方法、后置方法,在 Wordpress 中的插件。
其实这篇文章也给出了路由最简单的实现,两行代码。
学习了 :+1:
学习了