Bachir Soussi Chiadmi 58f46e4e8f caore d8 files 10 yıl önce
..
src 58f46e4e8f caore d8 files 10 yıl önce
.gitignore 58f46e4e8f caore d8 files 10 yıl önce
.travis.yml 58f46e4e8f caore d8 files 10 yıl önce
CHANGELOG.md 58f46e4e8f caore d8 files 10 yıl önce
LICENSE 58f46e4e8f caore d8 files 10 yıl önce
README.md 58f46e4e8f caore d8 files 10 yıl önce
composer.json 58f46e4e8f caore d8 files 10 yıl önce
composer.lock 58f46e4e8f caore d8 files 10 yıl önce
phpunit.xml.dist 58f46e4e8f caore d8 files 10 yıl önce

README.md

Stack/Builder

Builder for stack middlewares based on HttpKernelInterface.

Stack/Builder is a small library that helps you construct a nested HttpKernelInterface decorator tree. It models it as a stack of middlewares.

Example

If you want to decorate a silex app with session and cache middlewares, you'll have to do something like this:

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')
    )
);

This can get quite annoying indeed. Stack/Builder simplifies that:

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

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

As you can see, by arranging the layers as a stack, they become a lot easier to work with.

In the front controller, you need to serve the request:

use Symfony\Component\HttpFoundation\Request;

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

Stack/Builder also supports pushing a callable on to the stack, for situations where instantiating middlewares might be more complicated. The callable should accept a HttpKernelInterface as the first argument and should also return a HttpKernelInterface. The example above could be rewritten as:

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

Inspiration