Skip to content

Commit c3e2342

Browse files
committed
Refactor project architecture 🚀
1 parent 1d4f38a commit c3e2342

File tree

16 files changed

+64
-119
lines changed

16 files changed

+64
-119
lines changed

.env.sample

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
PRODUCTION_MODE=true
1+
PRODUCTION_MODE=false
2+
TIMEZONE="Europe/Dublin"

app/bootstrap.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,19 @@
1111
$dotenv = Dotenv::createImmutable(dirname(__DIR__));
1212
$dotenv->load();
1313

14-
$dotenv->required(['PRODUCTION_MODE']);
14+
$dotenv->required(['PRODUCTION_MODE', 'TIMEZONE']);
1515

1616
// Convert "true/false" string from phpdotenv to boolean
17-
define('PRODUCTION_MODE', filter_var($_ENV['PRODUCTION_MODE'], FILTER_VALIDATE_BOOLEAN));
18-
define('DEBUG_MODE', !PRODUCTION_MODE);
17+
define('IS_PRODUCTION_MODE', filter_var($_ENV['PRODUCTION_MODE'], FILTER_VALIDATE_BOOLEAN));
18+
define('IS_DEBUG_MODE', !IS_PRODUCTION_MODE);
1919

2020
// Set up settings
2121
$containerBuilder->addDefinitions(__DIR__ . '/container.php');
2222

23+
if (IS_PRODUCTION_MODE) {
24+
$containerBuilder->enableCompilation(__DIR__ . '/../var/cache');
25+
}
26+
2327
// Build PHP-DI Container instance
2428
$container = $containerBuilder->build();
2529

@@ -32,4 +36,13 @@
3236
// Register middleware
3337
(require __DIR__ . '/middleware.php')($app);
3438

39+
// Set up repositories
40+
/*(require __DIR__ . '/repositories.php')($app);
41+
$repositories = require __DIR__ . '/repositories.php';*/
42+
43+
// Set up dependencies
44+
/*(require __DIR__ . '/repositories.php')($app);
45+
$repositories = require __DIR__ . '/dependencies.php';*/
46+
47+
3548
return $app;

app/middleware.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?php
22

3-
use Selective\BasePath\BasePathMiddleware;
43
use Slim\App;
54
use Slim\Middleware\ErrorMiddleware;
65

@@ -11,8 +10,6 @@
1110
// Add the Slim built-in routing middleware
1211
$app->addRoutingMiddleware();
1312

14-
$app->add(BasePathMiddleware::class);
15-
1613
// Catch exceptions and errors
1714
$app->add(ErrorMiddleware::class);
1815
};

app/routes.php

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,5 @@
1212

1313
return function (App $app) {
1414
$app->get('/', \App\Action\HomeAction::class)->setName('home');
15-
16-
$app->options('/{routes:.*}', function (Request $request, Response $response) {
17-
// CORS Pre-Flight OPTIONS Request Handler
18-
return $response;
19-
});
20-
21-
$app->get('/{name}', function (Request $request, Response $response, array $args) {
22-
$response->getBody()->write('Hello ' . $args['name']);
23-
return $response;
24-
});
25-
2615
$app->post('/users', UserCreateAction::class);
2716
};

app/settings.php

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
<?php
2-
declare(strict_types=1);
3-
4-
use App\Application\Setting\Settings;
5-
use App\Application\Setting\SettingsInterface;
6-
use DI\ContainerBuilder;
7-
use Monolog\Logger;
8-
9-
return function (ContainerBuilder $containerBuilder) {
10-
// Global Settings Object
11-
$containerBuilder->addDefinitions([
12-
SettingsInterface::class => function () {
13-
return new Settings([
14-
'displayErrorDetails' => PRODUCTION_MODE,
15-
'logError' => false,
16-
'logErrorDetails' => false,
17-
'logger' => [
18-
'name' => 'slim-app',
19-
'path' => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../logs/app.log',
20-
'level' => Logger::DEBUG,
21-
],
22-
]);
23-
}
24-
]);
25-
};
2+
3+
// Should be set to 0 in production
4+
error_reporting(E_ALL);
5+
6+
// Should be set to '0' in production
7+
ini_set('display_errors', IS_DEBUG_MODE);
8+
9+
// Timezone
10+
date_default_timezone_set($_ENV['TIMEZONE'] ?? 'Europe/Dublin');
11+
12+
// Settings
13+
$settings = [];
14+
15+
// Path settings
16+
$settings['root'] = dirname(__DIR__);
17+
18+
// Error Handling Middleware settings
19+
$settings['error'] = [
20+
21+
// Should be set to false in production
22+
'display_error_details' => IS_DEBUG_MODE,
23+
24+
// Parameter is passed to the default ErrorHandler
25+
// View in rendered output by enabling the "displayErrorDetails" setting.
26+
// For the console and unit tests we also disable it
27+
'log_errors' => IS_DEBUG_MODE,
28+
29+
// Display error details in error log
30+
'log_error_details' => IS_DEBUG_MODE,
31+
];
32+
33+
return $settings;

composer.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
"illuminate/database": "^8.61",
3434
"monolog/monolog": "^2.2",
3535
"php-di/php-di": "^6.3",
36-
"shrikeh/teapot": "^2.3",
3736
"slim/psr7": "^1.3",
3837
"slim/slim": "^4.7",
3938
"vlucas/phpdotenv": "^5.3"

public/index.php

Lines changed: 1 addition & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -11,69 +11,5 @@
1111

1212
require __DIR__ . '/../vendor/autoload.php';
1313

14-
// Instantiate PHP-DI ContainerBuilder
15-
$containerBuilder = new ContainerBuilder();
16-
17-
$settings = require __DIR__ . '/../app/bootstrap.php';
18-
19-
if (DEBUG_MODE) {
20-
$containerBuilder->enableCompilation(__DIR__ . '/../var/cache');
21-
}
22-
2314
// Set up settings
24-
$settings($containerBuilder);
25-
26-
// Set up dependencies
27-
$dependencies = require __DIR__ . '/../app/dependencies.php';
28-
$dependencies($containerBuilder);
29-
30-
// Set up repositories
31-
$repositories = require __DIR__ . '/../app/repositories.php';
32-
$repositories($containerBuilder);
33-
34-
// Build PHP-DI Container instance
35-
$container = $containerBuilder->build();
36-
37-
// Instantiate the app
38-
AppFactory::setContainer($container);
39-
$app = AppFactory::create();
40-
$callableResolver = $app->getCallableResolver();
41-
42-
// Register middleware
43-
$middleware = require __DIR__ . '/../app/middleware.php';
44-
$middleware($app);
45-
46-
// Register routes
47-
$routes = require __DIR__ . '/../app/routes.php';
48-
$routes($app);
49-
50-
/** @var SettingsInterface $settings */
51-
$settings = $container->get(SettingsInterface::class);
52-
53-
$displayErrorDetails = $settings->get('displayErrorDetails');
54-
$logError = $settings->get('logError');
55-
$logErrorDetails = $settings->get('logErrorDetails');
56-
57-
// Create Request object from globals
58-
$serverRequestCreator = ServerRequestCreatorFactory::create();
59-
$request = $serverRequestCreator->createServerRequestFromGlobals();
60-
61-
// Create Error Handler
62-
$responseFactory = $app->getResponseFactory();
63-
$errorHandler = new HttpErrorHandler($callableResolver, $responseFactory);
64-
65-
// Create Shutdown Handler
66-
$shutdownHandler = new ShutdownHandler($request, $errorHandler, $displayErrorDetails);
67-
register_shutdown_function($shutdownHandler);
68-
69-
// Add Routing Middleware
70-
$app->addRoutingMiddleware();
71-
72-
// Add Error Middleware
73-
$errorMiddleware = $app->addErrorMiddleware($displayErrorDetails, $logError, $logErrorDetails);
74-
$errorMiddleware->setDefaultErrorHandler($errorHandler);
75-
76-
// Run App & Emit Response
77-
$response = $app->handle($request);
78-
$responseEmitter = new ResponseEmitter();
79-
$responseEmitter->emit($response);
15+
(require __DIR__ . '/../app/bootstrap.php')->run();
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
declare(strict_types=1);
33

4-
namespace App\Application\Action;
4+
namespace App\Action;
55

66
use App\Domain\DomainException\DomainRecordNotFoundException;
77
use Psr\Http\Message\ResponseInterface as Response;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
declare(strict_types=1);
33

4-
namespace App\Application\Action;
4+
namespace App\Action;
55

66
use JsonSerializable;
77

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
declare(strict_types=1);
33

4-
namespace App\Application\Action;
4+
namespace App\Action;
55

66
use JsonSerializable;
77

0 commit comments

Comments
 (0)