ifcanduela/kernel-middleware

HTTP请求和响应的中间件处理器

1.0.0 2022-11-07 12:11 UTC

This package is auto-updated.

Last update: 2024-09-07 16:13:53 UTC


README

一个具有简单中间件实现的请求/响应处理器。

使用内核

ifcanduela\kernel\Kernel类已准备好由您的自定义类扩展

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class App extends \ifcanduela\kernel\Kernel
{
    public function __construct(array $middleware)
    {
        $middleware[] = $this->run(...);

        parent::__construct($middleware)
    }

    public function run(Request $request, Closure $next): Response
    {
        return new Response("hello");
    }
}

使用中间件

中间件必须是可调用的或实现\ifcanduela\kernel\Middleware。可调用对象的预期签名如下

function (Request $request, Closure $next): Response;

其中RequestResponse是Symfony HTTP Foundation类,而$next闭包是一个可选接受请求的函数,并将返回一个响应。

中间件可以返回$next()$next($request)以将控制权传递给链中的下一个中间件并获取一个响应对象。

class ExampleMiddleware implements Middleware
{
    public function handle($request, $next)
    {
        return $next();
    }
}

实现ifcanduela\kernel\Middleware的中间件

实现此接口的任何对象都是有效的中间件,包括匿名类

new Kernel([
    InitSessionMiddleware::class,

    new InitContainerMiddleware($container)

    new class implements Middleware {
        public function handle(Request $request, Closure $next): Response
        {
            // ...
        }
    }
])

使用可调用的中间件

实现__invoke()的函数和对象是可接受的中间件。

new Kernel([
    new class {
        public function __invoke($req, $next) {
            return $next();
        }
    },

    fn ($req, $next) => new JsonResponse([]),
])