Initial project structure with Slim skeleton
This commit is contained in:
29
app/dependencies.php
Normal file
29
app/dependencies.php
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Application\Settings\SettingsInterface;
|
||||
use DI\ContainerBuilder;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Logger;
|
||||
use Monolog\Processor\UidProcessor;
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
return function (ContainerBuilder $containerBuilder) {
|
||||
$containerBuilder->addDefinitions([
|
||||
LoggerInterface::class => function (ContainerInterface $c) {
|
||||
$settings = $c->get(SettingsInterface::class);
|
||||
|
||||
$loggerSettings = $settings->get('logger');
|
||||
$logger = new Logger($loggerSettings['name']);
|
||||
|
||||
$processor = new UidProcessor();
|
||||
$logger->pushProcessor($processor);
|
||||
|
||||
$handler = new StreamHandler($loggerSettings['path'], $loggerSettings['level']);
|
||||
$logger->pushHandler($handler);
|
||||
|
||||
return $logger;
|
||||
},
|
||||
]);
|
||||
};
|
9
app/middleware.php
Normal file
9
app/middleware.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Application\Middleware\SessionMiddleware;
|
||||
use Slim\App;
|
||||
|
||||
return function (App $app) {
|
||||
$app->add(SessionMiddleware::class);
|
||||
};
|
13
app/repositories.php
Normal file
13
app/repositories.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Domain\User\UserRepository;
|
||||
use App\Infrastructure\Persistence\User\InMemoryUserRepository;
|
||||
use DI\ContainerBuilder;
|
||||
|
||||
return function (ContainerBuilder $containerBuilder) {
|
||||
// Here we map our UserRepository interface to its in memory implementation
|
||||
$containerBuilder->addDefinitions([
|
||||
UserRepository::class => \DI\autowire(InMemoryUserRepository::class),
|
||||
]);
|
||||
};
|
26
app/routes.php
Normal file
26
app/routes.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Application\Actions\User\ListUsersAction;
|
||||
use App\Application\Actions\User\ViewUserAction;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Slim\App;
|
||||
use Slim\Interfaces\RouteCollectorProxyInterface as Group;
|
||||
|
||||
return function (App $app) {
|
||||
$app->options('/{routes:.*}', function (Request $request, Response $response) {
|
||||
// CORS Pre-Flight OPTIONS Request Handler
|
||||
return $response;
|
||||
});
|
||||
|
||||
$app->get('/', function (Request $request, Response $response) {
|
||||
$response->getBody()->write('Hello world!');
|
||||
return $response;
|
||||
});
|
||||
|
||||
$app->group('/users', function (Group $group) {
|
||||
$group->get('', ListUsersAction::class);
|
||||
$group->get('/{id}', ViewUserAction::class);
|
||||
});
|
||||
};
|
26
app/settings.php
Normal file
26
app/settings.php
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use App\Application\Settings\Settings;
|
||||
use App\Application\Settings\SettingsInterface;
|
||||
use DI\ContainerBuilder;
|
||||
use Monolog\Logger;
|
||||
|
||||
return function (ContainerBuilder $containerBuilder) {
|
||||
|
||||
// Global Settings Object
|
||||
$containerBuilder->addDefinitions([
|
||||
SettingsInterface::class => function () {
|
||||
return new Settings([
|
||||
'displayErrorDetails' => true, // Should be set to false in production
|
||||
'logError' => false,
|
||||
'logErrorDetails' => false,
|
||||
'logger' => [
|
||||
'name' => 'slim-app',
|
||||
'path' => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../logs/app.log',
|
||||
'level' => Logger::DEBUG,
|
||||
],
|
||||
]);
|
||||
}
|
||||
]);
|
||||
};
|
Reference in New Issue
Block a user