Version 1
[yaffs-website] / vendor / stack / builder / src / Stack / StackedHttpKernel.php
1 <?php
2
3 namespace Stack;
4
5 use Symfony\Component\HttpKernel\HttpKernelInterface;
6 use Symfony\Component\HttpKernel\TerminableInterface;
7 use Symfony\Component\HttpFoundation\Request;
8 use Symfony\Component\HttpFoundation\Response;
9
10 class StackedHttpKernel implements HttpKernelInterface, TerminableInterface
11 {
12     private $app;
13     private $middlewares = array();
14
15     public function __construct(HttpKernelInterface $app, array $middlewares)
16     {
17         $this->app = $app;
18         $this->middlewares = $middlewares;
19     }
20
21     public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true)
22     {
23         return $this->app->handle($request, $type, $catch);
24     }
25
26     public function terminate(Request $request, Response $response)
27     {
28         $prevKernel = null;
29         foreach ($this->middlewares as $kernel) {
30             // if prev kernel was terminable we can assume this middleware has already been called
31             if (!$prevKernel instanceof TerminableInterface && $kernel instanceof TerminableInterface) {
32                 $kernel->terminate($request, $response);
33             }
34             $prevKernel = $kernel;
35         }
36     }
37 }