inital commit
[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 $response->setContentType("text/plain");
31 ob_start($response);
32 var_dump($_SESSION, $session);
33 });
34 $routes->addRoute("GET", "/info", function(array $args = null) {
35 phpinfo();
36 });
37
38 foreach (parse_ini_file(__DIR__."/../routes.ini", true) as $controller => $definition) {
39 $factory = function(array $args = null) use($injector, $controller) {
40 $handler = $injector->make("app\\Controller\\$controller");
41 $handler($args);
42 };
43 foreach ($definition as $method => $locations) {
44 foreach ($locations as $location) {
45 $routes->addRoute($method, $location, $factory);
46 }
47 }
48 }
49 })
50 ->alias(RouteParser::class, RouteParser\Std::class)
51 ->alias(DataGenerator::class, DataGenerator\GroupCountBased::class);
52
53 $injector->share(Dispatcher::class)
54 ->alias(Dispatcher::class, Dispatcher\GroupCountBased::class)
55 ->delegate(Dispatcher\GroupCountBased::class, function($class, Injector $injector) {
56 return new $class($injector->make(RouteCollector::class)->getData());
57 });
58
59 $injector->prepare(Controller::class, function(Controller $controller, Injector $injector) {
60 if (method_exists($controller, "setSession")) {
61 $controller->setSession($injector->make(Session::class));
62 }
63 });
64
65 $injector->share(Session::class)
66 ->prepare(Session::class, function(Session $session, Injector $injector) {
67 if (isset($session->current) && (!isset($session->previous) || strcmp($session->current, $session->previous))) {
68 $session->previous = $session->current;
69 $session->current = $injector->make(Request::class)->getRequestUrl();
70 }
71 $session->current = $injector->make(Request::class)->getRequestUrl();
72 });
73
74 $injector->share(BaseUrl::class);
75 $injector->share(Web::class);