make this routes only available for non-production
[pharext/pharext.org] / app / bootstrap / router.php
1 <?php
2
3 namespace app;
4
5 use Auryn\Injector;
6
7 use FastRoute\DataGenerator;
8 use FastRoute\Dispatcher;
9 use FastRoute\RouteCollector;
10 use FastRoute\RouteParser;
11
12 use http\Env\Response;
13
14 $injector->share(RouteCollector::class)
15 ->prepare(RouteCollector::class, function($routes) use($injector) {
16 $routes->addRoute("GET", "/reset", function(array $args = null) use($injector) {
17 $injector->make(Session::class)->reset()->regenerateId();
18 $injector->make(Web::class)->redirect($injector->make(BaseUrl::class));
19 });
20 if (APP_ENVIRONMENT !== "production") {
21 $routes->addRoute("GET", "/session", function(array $args = null) use($injector) {
22 $session = $injector->make(Session::class);
23 $response = $injector->make(Response::class);
24 if (!(extension_loaded("xdebug") && ini_get("xdebug.overload_var_dump") && ini_get("html_errors"))) {
25 $response->setContentType("text/plain");
26 }
27 ob_start($response);
28 var_dump($_SESSION, $session);
29 });
30 $routes->addRoute("GET", "/info", function(array $args = null) {
31 phpinfo();
32 });
33 }
34
35 foreach (parse_ini_file(__DIR__."/../../config/routes.ini", true) as $controller => $definition) {
36 $factory = function(array $args = null) use($injector, $controller) {
37 $handler = $injector->make("app\\Controller\\$controller");
38 $handler($args);
39 };
40 foreach ($definition as $method => $locations) {
41 foreach ($locations as $location) {
42 $routes->addRoute($method, $location, $factory);
43 }
44 }
45 }
46 })
47 ->alias(RouteParser::class, RouteParser\Std::class)
48 ->alias(DataGenerator::class, DataGenerator\GroupCountBased::class);
49
50 $injector->share(Dispatcher::class)
51 ->alias(Dispatcher::class, Dispatcher\GroupCountBased::class)
52 ->delegate(Dispatcher\GroupCountBased::class, function($class, Injector $injector) {
53 return new $class($injector->make(RouteCollector::class)->getData());
54 });
55