many small updates
[pharext/pharext.org] / app / bootstrap / web.php
1 <?php
2
3 namespace app;
4
5 require_once __DIR__."/config.php";
6 require_once __DIR__."/github.php";
7
8 use Auryn\Injector;
9
10 use FastRoute\DataGenerator;
11 use FastRoute\Dispatcher;
12 use FastRoute\RouteCollector;
13 use FastRoute\RouteParser;
14
15 use http\Env\Request;
16 use http\Env\Response;
17
18 $injector->share(Request::class);
19 $injector->share(Response::class);
20
21 $injector->share(RouteCollector::class)
22 ->prepare(RouteCollector::class, function($routes) use($injector) {
23 $routes->addRoute("GET", "/reset", function(array $args = null) use($injector) {
24 $injector->make(Session::class)->reset()->regenerateId();
25 $injector->make(Web::class)->redirect($injector->make(BaseUrl::class));
26 });
27 $routes->addRoute("GET", "/session", function(array $args = null) use($injector) {
28 $session = $injector->make(Session::class);
29 $response = $injector->make(Response::class);
30 if (!(extension_loaded("xdebug") && ini_get("xdebug.overload_var_dump") && ini_get("html_errors"))) {
31 $response->setContentType("text/plain");
32 }
33 ob_start($response);
34 var_dump($_SESSION, $session);
35 });
36 $routes->addRoute("GET", "/info", function(array $args = null) {
37 phpinfo();
38 });
39
40 foreach (parse_ini_file(__DIR__."/../routes.ini", true) as $controller => $definition) {
41 $factory = function(array $args = null) use($injector, $controller) {
42 $handler = $injector->make("app\\Controller\\$controller");
43 $handler($args);
44 };
45 foreach ($definition as $method => $locations) {
46 foreach ($locations as $location) {
47 $routes->addRoute($method, $location, $factory);
48 }
49 }
50 }
51 })
52 ->alias(RouteParser::class, RouteParser\Std::class)
53 ->alias(DataGenerator::class, DataGenerator\GroupCountBased::class);
54
55 $injector->share(Dispatcher::class)
56 ->alias(Dispatcher::class, Dispatcher\GroupCountBased::class)
57 ->delegate(Dispatcher\GroupCountBased::class, function($class, Injector $injector) {
58 return new $class($injector->make(RouteCollector::class)->getData());
59 });
60
61 $injector->prepare(Controller::class, function(Controller $controller, Injector $injector) {
62 if (method_exists($controller, "setSession")) {
63 $controller->setSession($injector->make(Session::class));
64 }
65 });
66
67 $injector->share(Session::class)
68 ->prepare(Session::class, function(Session $session, Injector $injector) {
69 if (isset($session->current) && (!isset($session->previous) || strcmp($session->current, $session->previous))) {
70 $session->previous = $session->current;
71 $session->current = $injector->make(Request::class)->getRequestUrl();
72 }
73 $session->current = $injector->make(Request::class)->getRequestUrl();
74 });
75
76 $injector->share(BaseUrl::class);
77 $injector->share(Web::class);