slovocast/code/src/Bootstrap.php

86 lines
2.0 KiB
PHP
Raw Normal View History

<?php
namespace Slovocast;
use Slim\App;
use Slim\Factory\AppFactory;
use League\Config\Configuration;
use DI\Container;
use DI\ContainerBuilder;
class Bootstrap
{
/**
* Pulls out all the configuration schemas and configuration values.
*
* @return Configuration
*/
protected static function initConfig(): Configuration
{
$config = new Configuration();
// set all configuration details
return $config;
}
/**
* Set up the Container with all of its definitions, as well as
* initialization of configuration.
*
* @return Container
*/
protected static function initContainer(): Container
{
$containerBuilder = new ContainerBuilder();
$config = self::initConfig();
$containerBuilder->addDefinitions([
'conifg' => $config,
// more DI stuff
]);
return $containerBuilder->build();
}
/**
* Tasking the instaniated Application, sets up all the routes for the
* application.
*
* @param App $app
* @return void
*/
protected static function establishRoutes(App $app): void
{
$app->get('/', function ($req, $res) {
$res->getBody()->write(json_encode([ 'message' => "hello!" ]));
return $res->withHeader("Content-Type", "application/json");
});
}
/**
* Taking an instantiated application, sets up all the middleware required
* for the application to run.
*
* @param App $app
*/
protected static function establishMiddleware(App $app): void
{
$app->addErrorMiddleware(true, true, true);
}
/**
* Instantiates the application.
*
* @return App
*/
public static function init(): App
{
$container = self::initContainer();
$app = AppFactory::createFromContainer($container);
self::establishMiddleware($app);
self::establishRoutes($app);
return $app;
}
}