Middleware 是一种控制器,但其主要目的不是向用户提供预期响应(尽管 Middleware 可以返回错误文本),而是在响应生成之前或之后执行特定任务。
不同于控制器,这个 Middleware 可以不仅分配给一个路由,还可以分配给一组路由。两个地方可以有多个不同的 Middleware(或者甚至相同的 Middleware,如果需要的话)。
例如,用户授权可以在 Middleware 中实现并应用于需要的路由组。在路由附加的控制器或其他主要操作执行之前,会确定当前用户及其授权状态。
否则,Middleware 类将执行交给另一个控制器,返回错误,或根据实现情况重定向到其他路由。
当 Middleware() 方法(选项 after() 或 before())在路由中应用时,它具有一个 data 参数。这是与控制器的另一个区别,可以将数据数组传递给此参数,然后这些数据在 Middleware 中可用。 数组数据在方法 Hleb\Static\Router::data() 中或通过容器访问。
Middleware 类必须继承自 Hleb\Base\Middleware。
通常,该类的被调用方法的目的是不返回任何内容,而是检查条件。但在某些情况下,也允许返回值。
string|int|float - 这些类型将被转换为字符串并以文本形式输出。
array - 返回的数组将转换为 JSON 字符串。执行到此终止。
bool - 如果返回 false,则相当于停止进一步执行。
除了拷贝示例文件 DefaultMiddleware.php并修改之外,还有一种简单方法可以通过控制台命令创建所需的类。
$php console --add middleware ExampleMiddleware
这个命令将创建一个新的模板 /app/Middlewares/ExampleMiddleware.php.
可以为类使用另一个合适的名称。
HLEB2 框架默认也允许为此命令创建一个自定义模板。