5 use Symfony\Component\HttpKernel\HttpKernelInterface;
11 public function __construct()
13 $this->specs = new \SplStack();
16 public function unshift(/*$kernelClass, $args...*/)
18 if (func_num_args() === 0) {
19 throw new \InvalidArgumentException("Missing argument(s) when calling unshift");
22 $spec = func_get_args();
23 $this->specs->unshift($spec);
28 public function push(/*$kernelClass, $args...*/)
30 if (func_num_args() === 0) {
31 throw new \InvalidArgumentException("Missing argument(s) when calling push");
34 $spec = func_get_args();
35 $this->specs->push($spec);
40 public function resolve(HttpKernelInterface $app)
42 $middlewares = array($app);
44 foreach ($this->specs as $spec) {
46 $firstArg = array_shift($args);
48 if (is_callable($firstArg)) {
49 $app = $firstArg($app);
51 $kernelClass = $firstArg;
52 array_unshift($args, $app);
54 $reflection = new \ReflectionClass($kernelClass);
55 $app = $reflection->newInstanceArgs($args);
58 array_unshift($middlewares, $app);
61 return new StackedHttpKernel($app, $middlewares);