Files
elixforms-web-services/public/index.php
T
administrator 1766057cb9 refactor
- add documentation for EF API calling implementation
- greater adherence to standards
- better DI logic
2026-07-13 17:09:36 +02:00

49 lines
1.5 KiB
PHP

<?php
$container = require __DIR__ . '/../bootstrap.php';
use Core\Router;
use Core\Request;
use Core\Response;
use Core\RateLimiter\RateLimiterInterface;
use Psr\Log\LoggerInterface;
$logger = $container->make(LoggerInterface::class);
set_exception_handler(function (\Throwable $e) use ($logger) {
$logger->error('Uncaught Exception: ' . $e->getMessage(), [
'exception' => $e,
'trace' => $e->getTraceAsString()
]);
http_response_code(500);
header('Content-Type: application/json');
echo json_encode([
'error' => 'Internal Server Error',
'message' => 'An unexpected error occurred.'
]);
exit;
});
$limiter = $container->make(RateLimiterInterface::class);
$router = new Router($container); // vedi nota: router può ricevere container
// register routes (path without version prefix)
$router->get('/users', 'UsersController@index');
$router->post('/users', 'UsersController@create');
$router->get('/example', 'ExampleController@test');
$request = new Request();
$response = new Response();
// Rate limiting by IP address
$key = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
if (!$limiter->allow($key)) {
$retry = $limiter->getRetryAfter($key);
header('Retry-After: ' . $retry);
$logger->warning('Rate limit exceeded', ['ip' => $key]);
$response->json(['error' => 'Too Many Requests'], 429);
}
$logger->info('Dispatching request', ['path' => $request->path(), 'method' => $request->method()]);
$router->dispatch($request, $response);