public function testStackMiddleware() { $this->app->get("/", function () { return new Response("hello from controller"); }); $this->app->registerStackMiddleware("Singo\\Tests\\Middleware\\TestMiddleware"); $app = $this->app->builder->resolve($this->app); $response = $app->handle(Request::create("/")); $this->assertEquals($response->getContent(), "hello from middleware"); }
/** * @param Application $container */ public function init(Application $container) { /** * container aware event dispatcher */ $container->register(new ContainerAwareEventDispatcher()); /** * cache */ $container->register(new CacheServiceProvider()); /** * configuration */ $container->register(new Config()); /** * logger */ $container->register(new Logger()); /** * doctrine orm */ $container->register(new Orm()); /** * validator */ $container->register(new Validator()); /** * mailer */ $container->register(new Mailer()); /** * command bus */ $container->register(new CommandBus()); /** * security */ $container->register(new Firewall()); /** * controller as a service */ $container->register(new ServiceControllerServiceProvider(), ["tactician.inflector" => "class_name", "tactician.middlewares" => [$container["command.bus.logger.middleware"], $container["command.bus.validation.middleware"]]]); /** * Save container in static variable */ self::$container = $container; if ($this instanceof Application) { /** * content negotiation middleware */ $container->registerStackMiddleware(Negotiation::class, null, null, null, ["language_priorities" => $container["config"]->get("api/content_negotiator/language") ?: ["en"], "format_priorities" => $container["config"]->get("api/content_negotiator/format") ?: ["*/*"]]); /** * cors */ $cors_config = $container["config"]->get("api/cors") ?: ["allowedHeaders" => ["*"], "allowedMethod" => ["*"], "allowedOrigins" => ["*"], "exposedHeaders" => false, "maxAge" => false, "supportsCredentials" => false]; $container->registerStackMiddleware(Cors::class, $cors_config); } /** * boot module if module feature enabled in configuration */ if ($container->offsetExists("use.module") && $container["use.module"] === true) { $this->bootModule(); } }