你以为你了解 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 协议》,转载必须注明作者和本文链接
讨论数量: 14

这也太简单了吧 :confused:

1个月前 评论
yyy123456 (作者) 1个月前
苏近之 (楼主) 1个月前
苏近之 (楼主) 1个月前

个人感觉这是取巧,算不上中间件

1个月前 评论
苏近之 (楼主) 1个月前

你是认真的?

1个月前 评论
苏近之 (楼主) 1个月前

我就当抛砖引玉,如果让你去实现中间件机制,你会怎么实现?是简单的实现,还是复杂的实现?中间件在 PHP 框架中,本质就是一种代码扩展机制,换一个名词也可以,比如在 ThinkPHP 中的前置方法、后置方法,在 Wordpress 中的插件。

1个月前 评论

其实这篇文章也给出了路由最简单的实现,两行代码。

1个月前 评论

学习了 :+1:

1个月前 评论
苏近之 (楼主) 1个月前

学习了

3周前 评论
苏近之 (楼主) 3周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!