/** * Class constructor. */ public function __construct() { parent::__construct(); $this['debug'] = true; $this['logger'] = function ($app) { return new Logger('app', [new StreamHandler('php://stdout')]); }; $this['console'] = function ($app) { return new Console(); }; $this['dispatcher'] = function ($app) { $dispatcher = new Dispatcher(); $dispatcher->setLogger($app['logger']); $dispatcher->addLayer(new RouteMiddlewareLayer('route', $app)); $dispatcher->addLayer(new MiddlewareLayer('default')); return $dispatcher; }; $this['server'] = function ($app) { $server = new Server(); $server->setLogger($app['logger']); $server->setDispatcher($app['dispatcher']); return $server; }; $this['request'] = function ($app) { return $app['server']->getRequest(); }; $this['route'] = null; }
public function testDispatchLayerOrder() { $dispatcher = new Dispatcher(); $dispatcher->addLayer(new MiddlewareLayer('L1')); $dispatcher->addLayer(new MiddlewareLayer('L2')); $dispatcher->addLayer(new MiddlewareLayer('L3')); $layers = [1 => $dispatcher->getLayer('L1'), 2 => $dispatcher->getLayer('L2'), 3 => $dispatcher->getLayer('L3')]; $buffer = 'order:'; for ($i = 1; $i < 4; $i++) { for ($j = 1; $j < 4; $j++) { $layers[$i]->mount('M' . $j, function ($request) use(&$buffer, $i, $j) { $buffer .= sprintf('<%s-%s>', $i, $j); $this->flow(); $buffer .= sprintf('</%s-%s>', $i, $j); }); } } $dispatcher->dispatch(new Request()); $this->assertEquals('order:<3-1><3-2><3-3><2-1><2-2><2-3><1-1><1-2><1-3></1-3></1-2></1-1></2-3></2-2></2-1></3-3></3-2></3-1>', $buffer); }