stack/builder

此包已被废弃,不再维护。没有建议的替代包。

基于HttpKernelInterface的stack中间件构建器。

维护者

详细信息

github.com/stackphp/builder

源码

问题

安装次数: 41,105,041

依赖项: 51

建议者: 3

安全: 0

星标: 295

关注者: 13

分支: 28

开放问题: 1

v1.0.6 2020-01-30 12:17 UTC

This package is not auto-updated.

Last update: 2024-08-09 13:33:01 UTC


README

基于HttpKernelInterface的stack中间件构建器。

Stack/Builder是一个小型库,它帮助您构建一个嵌套的HttpKernelInterface装饰器树。它将其建模为一个中间件栈。

示例

如果您想用session和cache中间件装饰一个silex应用程序,您将不得不这样做

use Symfony\Component\HttpKernel\HttpCache\Store;

$app = new Silex\Application();

$app->get('/', function () {
    return 'Hello World!';
});

$app = new Stack\Session(
    new Symfony\Component\HttpKernel\HttpCache\HttpCache(
        $app,
        new Store(__DIR__.'/cache')
    )
);

这确实会变得相当令人厌烦。Stack/Builder简化了这一点

$stack = (new Stack\Builder())
    ->push('Stack\Session')
    ->push('Symfony\Component\HttpKernel\HttpCache\HttpCache', new Store(__DIR__.'/cache'));

$app = $stack->resolve($app);

正如您所看到的,通过将层排列成一个栈,它们就变得容易多了。

在前端控制器中,您需要处理请求

use Symfony\Component\HttpFoundation\Request;

$request = Request::createFromGlobals();
$response = $app->handle($request)->send();
$app->terminate($request, $response);

Stack/Builder还支持将一个callable推入栈中,对于可能更复杂的中间件实例化情况。这个callable应该接受一个HttpKernelInterface作为第一个参数,并返回一个HttpKernelInterface。上面的例子可以重写为

$stack = (new Stack\Builder())
    ->push('Stack\Session')
    ->push(function ($app) {
        $cache = new HttpCache($app, new Store(__DIR__.'/cache'));
        return $cache;
    })
;

灵感来源