-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathapp.php
More file actions
51 lines (41 loc) · 1.49 KB
/
app.php
File metadata and controls
51 lines (41 loc) · 1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
declare(strict_types=1);
namespace App;
use DI\ContainerBuilder;
use Middlewares\AccessLog as AccessLogMiddleware;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Log\LoggerInterface;
use Slim\App;
use Slim\Factory\AppFactory;
use function Compwright\PhpSession\Frameworks\Slim\registerSessionMiddleware;
/**
* @return App<ContainerInterface|null>
*/
function app(): App
{
$builder = new ContainerBuilder();
$builder->addDefinitions(__DIR__ . '/config.php');
$container = $builder->build();
AppFactory::setContainer($container);
$app = AppFactory::create();
/** @var LoggerInterface $logger */
$logger = $container->get(LoggerInterface::class);
// Middleware
$app->add(AccessLogMiddleware::class);
registerSessionMiddleware($app);
$app->addRoutingMiddleware(); // must come before ErrorMiddleware
$app->addErrorMiddleware( // must come last
true, // display error details
true, // log errors
false, // log error details
$logger
);
// App routes
/** @var Routes\SessionRoutes $routes */
$routes = $container->get(Routes\SessionRoutes::class);
$app->get('/', fn(ServerRequestInterface $request, ResponseInterface $response) => $routes->readSession($request, $response));
$app->post('/', fn(ServerRequestInterface $request, ResponseInterface $response) => $routes->writeSession($request, $response));
return $app;
}