flush
[pharext/pharext.org] / app / bootstrap / router.php
diff --git a/app/bootstrap/router.php b/app/bootstrap/router.php
new file mode 100644 (file)
index 0000000..7377cfd
--- /dev/null
@@ -0,0 +1,53 @@
+<?php
+
+namespace app;
+
+use Auryn\Injector;
+
+use FastRoute\DataGenerator;
+use FastRoute\Dispatcher;
+use FastRoute\RouteCollector;
+use FastRoute\RouteParser;
+
+use http\Env\Response;
+
+$injector->share(RouteCollector::class)
+       ->prepare(RouteCollector::class, function($routes) use($injector) {
+               $routes->addRoute("GET", "/reset", function(array $args = null) use($injector) {
+                       $injector->make(Session::class)->reset()->regenerateId();
+                       $injector->make(Web::class)->redirect($injector->make(BaseUrl::class));
+               });
+               $routes->addRoute("GET", "/session", function(array $args = null) use($injector) {
+                       $session = $injector->make(Session::class);
+                       $response = $injector->make(Response::class);
+                       if (!(extension_loaded("xdebug") && ini_get("xdebug.overload_var_dump") && ini_get("html_errors"))) {
+                               $response->setContentType("text/plain");
+                       }
+                       ob_start($response);
+                       var_dump($_SESSION, $session);
+               });
+               $routes->addRoute("GET", "/info", function(array $args = null) {
+                       phpinfo();
+               });
+
+               foreach (parse_ini_file(__DIR__."/../../config/routes.ini", true) as $controller => $definition) {
+                       $factory = function(array $args = null) use($injector, $controller) {
+                               $handler = $injector->make("app\\Controller\\$controller");
+                               $handler($args);
+                       };
+                       foreach ($definition as $method => $locations) {
+                               foreach ($locations as $location) {
+                                       $routes->addRoute($method, $location, $factory);
+                               }
+                       }
+               }
+       })
+       ->alias(RouteParser::class, RouteParser\Std::class)
+       ->alias(DataGenerator::class, DataGenerator\GroupCountBased::class);
+
+$injector->share(Dispatcher::class)
+       ->alias(Dispatcher::class, Dispatcher\GroupCountBased::class)
+       ->delegate(Dispatcher\GroupCountBased::class, function($class, Injector $injector) {
+               return new $class($injector->make(RouteCollector::class)->getData());
+       });
+