2021-01-29 12:54:43 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App;
|
|
|
|
|
|
2021-02-02 13:25:27 +01:00
|
|
|
use App\ErrorHandler\CustomHtmlErrorRenderer;
|
2021-01-29 14:16:57 +01:00
|
|
|
use App\Middlewares\ThrottleMiddleware;
|
2021-01-29 12:54:43 +01:00
|
|
|
use Dotenv\Dotenv;
|
|
|
|
|
use Dotenv\Exception\InvalidPathException;
|
|
|
|
|
use Slim\Factory\AppFactory;
|
|
|
|
|
|
|
|
|
|
class Kernel
|
|
|
|
|
{
|
|
|
|
|
private static $app;
|
|
|
|
|
private static $env;
|
|
|
|
|
|
2021-02-03 10:04:06 +01:00
|
|
|
private static function build()
|
2021-01-29 12:54:43 +01:00
|
|
|
{
|
|
|
|
|
self::$app = AppFactory::create();
|
|
|
|
|
|
|
|
|
|
self::loadEnv();
|
|
|
|
|
self::loadRoutes();
|
|
|
|
|
self::loadMiddlewares();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static function loadRoutes()
|
|
|
|
|
{
|
|
|
|
|
require_once __DIR__ . '/Routes/web.php';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static function loadMiddlewares()
|
|
|
|
|
{
|
|
|
|
|
// Add Routing Middleware
|
|
|
|
|
self::$app->addRoutingMiddleware();
|
|
|
|
|
|
2021-02-03 10:04:06 +01:00
|
|
|
self::$app->add(new ThrottleMiddleware());
|
2021-01-29 14:16:57 +01:00
|
|
|
|
2021-01-29 12:54:43 +01:00
|
|
|
/**
|
|
|
|
|
* Add Error Handling Middleware
|
|
|
|
|
*
|
|
|
|
|
* @param bool $displayErrorDetails -> Should be set to false in production
|
|
|
|
|
* @param bool $logErrors -> Parameter is passed to the default ErrorHandler
|
|
|
|
|
* @param bool $logErrorDetails -> Display error details in error log
|
|
|
|
|
* which can be replaced by a callable of your choice.
|
|
|
|
|
|
|
|
|
|
* Note: This middleware should be added last. It will not handle any exceptions/errors
|
|
|
|
|
* for middleware added after it.
|
|
|
|
|
*/
|
|
|
|
|
$errorMiddleware = self::$app->addErrorMiddleware(
|
|
|
|
|
env('displayError', false),
|
|
|
|
|
env('logErrors', false),
|
|
|
|
|
env('logErrorDetails', false)
|
|
|
|
|
);
|
2021-02-02 13:25:27 +01:00
|
|
|
$errorHandler = $errorMiddleware->getDefaultErrorHandler();
|
|
|
|
|
$errorHandler->registerErrorRenderer('text/html', CustomHtmlErrorRenderer::class);
|
2021-01-29 12:54:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static function loadEnv()
|
|
|
|
|
{
|
|
|
|
|
try {
|
|
|
|
|
self::$env = Dotenv::createImmutable(__DIR__ . '/..')->load();
|
|
|
|
|
} catch (InvalidPathException $e) {
|
|
|
|
|
// no env file present
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function app()
|
|
|
|
|
{
|
|
|
|
|
return self::$app;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function env(string $key, $default = null)
|
|
|
|
|
{
|
2021-02-02 13:25:27 +01:00
|
|
|
$value = self::$env[$key] ?? $default;
|
2021-01-29 12:54:43 +01:00
|
|
|
|
|
|
|
|
if ($value === false) {
|
|
|
|
|
return $default;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch (strtolower($value)) {
|
|
|
|
|
case '(true)':
|
2021-02-03 10:04:06 +01:00
|
|
|
$value = true;
|
|
|
|
|
break;
|
2021-01-29 12:54:43 +01:00
|
|
|
|
|
|
|
|
case 'false':
|
|
|
|
|
case '(false)':
|
2021-02-03 10:04:06 +01:00
|
|
|
$value = false;
|
|
|
|
|
break;
|
2021-01-29 12:54:43 +01:00
|
|
|
|
|
|
|
|
case 'empty':
|
|
|
|
|
case '(empty)':
|
2021-02-03 10:04:06 +01:00
|
|
|
$value = '';
|
|
|
|
|
break;
|
2021-01-29 12:54:43 +01:00
|
|
|
|
|
|
|
|
case 'null':
|
|
|
|
|
case '(null)':
|
2021-02-03 10:04:06 +01:00
|
|
|
$value = null;
|
|
|
|
|
break;
|
2021-01-29 12:54:43 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function run()
|
|
|
|
|
{
|
2021-02-03 10:04:06 +01:00
|
|
|
self::build();
|
2021-01-29 12:54:43 +01:00
|
|
|
self::$app->run();
|
|
|
|
|
}
|
|
|
|
|
}
|