You are here

Builder.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/stack/builder/src/Stack/Builder.php

Namespace

Stack

File

vendor/stack/builder/src/Stack/Builder.php
View source
<?php

namespace Stack;

use Symfony\Component\HttpKernel\HttpKernelInterface;
class Builder {
  private $specs;
  public function __construct() {
    $this->specs = new \SplStack();
  }
  public function unshift() {
    if (func_num_args() === 0) {
      throw new \InvalidArgumentException("Missing argument(s) when calling unshift");
    }
    $spec = func_get_args();
    $this->specs
      ->unshift($spec);
    return $this;
  }
  public function push() {
    if (func_num_args() === 0) {
      throw new \InvalidArgumentException("Missing argument(s) when calling push");
    }
    $spec = func_get_args();
    $this->specs
      ->push($spec);
    return $this;
  }
  public function resolve(HttpKernelInterface $app) {
    $middlewares = array(
      $app,
    );
    foreach ($this->specs as $spec) {
      $args = $spec;
      $firstArg = array_shift($args);
      if (is_callable($firstArg)) {
        $app = $firstArg($app);
      }
      else {
        $kernelClass = $firstArg;
        array_unshift($args, $app);
        $reflection = new \ReflectionClass($kernelClass);
        $app = $reflection
          ->newInstanceArgs($args);
      }
      array_unshift($middlewares, $app);
    }
    return new StackedHttpKernel($app, $middlewares);
  }

}

Classes

Namesort descending Description
Builder