Add some defines for global constants

This commit is contained in:
Dave Smith-Hayes 2024-06-17 21:49:09 -04:00
parent 9bf80dbf9e
commit 80c54eefc2
3 changed files with 330 additions and 12 deletions

View File

@ -11,7 +11,8 @@
"league/config": "^1.2", "league/config": "^1.2",
"monolog/monolog": "^3.6", "monolog/monolog": "^3.6",
"slim/flash": "^0.4.0", "slim/flash": "^0.4.0",
"odan/session": "^6.1" "odan/session": "^6.1",
"dotenv-org/phpdotenv-vault": "^0.2.4"
}, },
"require-dev": { "require-dev": {
"phpunit/phpunit": "^11.1", "phpunit/phpunit": "^11.1",

276
app/composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "e53cd4e029d379845d39165f4cc34653", "content-hash": "7c62ce964dc867d3d860dc89275187b0",
"packages": [ "packages": [
{ {
"name": "dflydev/dot-access-data", "name": "dflydev/dot-access-data",
@ -81,6 +81,59 @@
}, },
"time": "2022-10-27T11:44:00+00:00" "time": "2022-10-27T11:44:00+00:00"
}, },
{
"name": "dotenv-org/phpdotenv-vault",
"version": "v0.2.4",
"source": {
"type": "git",
"url": "https://github.com/dotenv-org/phpdotenv-vault.git",
"reference": "5fca3eb6c6a0e9bd320a72781c6a6f9342ab5cd4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dotenv-org/phpdotenv-vault/zipball/5fca3eb6c6a0e9bd320a72781c6a6f9342ab5cd4",
"reference": "5fca3eb6c6a0e9bd320a72781c6a6f9342ab5cd4",
"shasum": ""
},
"require": {
"php": "^7.1.3 || ^8.0",
"vlucas/phpdotenv": "^5.5"
},
"require-dev": {
"phpunit/phpunit": "^9.0|^8.0|^7.0|6.0"
},
"type": "library",
"autoload": {
"psr-4": {
"DotenvVault\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "dotenv",
"email": "mot@dotenv.org",
"homepage": "https://github.com/dotenv-org"
}
],
"description": "Load environment variables from encrypted .env.vault files",
"keywords": [
"configurations",
"dotenv",
"dotenv-vault",
"env",
"environment",
"environment variables"
],
"support": {
"issues": "https://github.com/dotenv-org/phpdotenv-vault/issues",
"source": "https://github.com/dotenv-org/phpdotenv-vault/tree/v0.2.4"
},
"time": "2023-11-04T06:15:17+00:00"
},
{ {
"name": "fig/http-message-util", "name": "fig/http-message-util",
"version": "1.1.5", "version": "1.1.5",
@ -137,6 +190,68 @@
}, },
"time": "2020-11-24T22:02:12+00:00" "time": "2020-11-24T22:02:12+00:00"
}, },
{
"name": "graham-campbell/result-type",
"version": "v1.1.2",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Result-Type.git",
"reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862",
"reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0",
"phpoption/phpoption": "^1.9.2"
},
"require-dev": {
"phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
},
"type": "library",
"autoload": {
"psr-4": {
"GrahamCampbell\\ResultType\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
}
],
"description": "An Implementation Of The Result Type",
"keywords": [
"Graham Campbell",
"GrahamCampbell",
"Result Type",
"Result-Type",
"result"
],
"support": {
"issues": "https://github.com/GrahamCampbell/Result-Type/issues",
"source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type",
"type": "tidelift"
}
],
"time": "2023-11-12T22:16:48+00:00"
},
{ {
"name": "laravel/serializable-closure", "name": "laravel/serializable-closure",
"version": "v1.3.3", "version": "v1.3.3",
@ -948,6 +1063,81 @@
], ],
"time": "2023-11-02T10:04:50+00:00" "time": "2023-11-02T10:04:50+00:00"
}, },
{
"name": "phpoption/phpoption",
"version": "1.9.2",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
"reference": "80735db690fe4fc5c76dfa7f9b770634285fa820"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820",
"reference": "80735db690fe4fc5c76dfa7f9b770634285fa820",
"shasum": ""
},
"require": {
"php": "^7.2.5 || ^8.0"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": true
},
"branch-alias": {
"dev-master": "1.9-dev"
}
},
"autoload": {
"psr-4": {
"PhpOption\\": "src/PhpOption/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Johannes M. Schmitt",
"email": "schmittjoh@gmail.com",
"homepage": "https://github.com/schmittjoh"
},
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
}
],
"description": "Option Type for PHP",
"keywords": [
"language",
"option",
"php",
"type"
],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
"source": "https://github.com/schmittjoh/php-option/tree/1.9.2"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
"type": "tidelift"
}
],
"time": "2023-11-12T21:59:55+00:00"
},
{ {
"name": "psr/container", "name": "psr/container",
"version": "2.0.2", "version": "2.0.2",
@ -2090,6 +2280,90 @@
} }
], ],
"time": "2024-05-16T10:04:27+00:00" "time": "2024-05-16T10:04:27+00:00"
},
{
"name": "vlucas/phpdotenv",
"version": "v5.6.0",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
"reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"shasum": ""
},
"require": {
"ext-pcre": "*",
"graham-campbell/result-type": "^1.1.2",
"php": "^7.2.5 || ^8.0",
"phpoption/phpoption": "^1.9.2",
"symfony/polyfill-ctype": "^1.24",
"symfony/polyfill-mbstring": "^1.24",
"symfony/polyfill-php80": "^1.24"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-filter": "*",
"phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
},
"suggest": {
"ext-filter": "Required to use the boolean validator."
},
"type": "library",
"extra": {
"bamarni-bin": {
"bin-links": true,
"forward-command": true
},
"branch-alias": {
"dev-master": "5.6-dev"
}
},
"autoload": {
"psr-4": {
"Dotenv\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Vance Lucas",
"email": "vance@vancelucas.com",
"homepage": "https://github.com/vlucas"
}
],
"description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
"keywords": [
"dotenv",
"env",
"environment"
],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
"source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
"type": "tidelift"
}
],
"time": "2023-11-12T22:43:29+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [

View File

@ -17,9 +17,20 @@ use Slim\Views\TwigMiddleware;
use Slim\Psr7\Factory\ResponseFactory; use Slim\Psr7\Factory\ResponseFactory;
use Slovocast\Routes; use Slovocast\Routes;
use Slovocast\Configuration\SiteInformationSchema; use Slovocast\Configuration\{
use Slovocast\Configuration\DatabaseConnectionSchema; SiteInformationSchema,
use Slovocast\Configuration\SessionSchema; DatabaseConnectionSchema,
SessionSchema
};
use Slovocast\Domain\Repository\{
UserRepositoryInterface,
UserRepository
};
use Slovocast\Infrastructure\{
DatabaseConnectionInterface,
User\UserAuthorizationInterface,
User\BasicUserAuthorization
};
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use Monolog\Logger; use Monolog\Logger;
@ -29,6 +40,16 @@ use Odan\Session\PhpSession;
use Odan\Session\SessionInterface; use Odan\Session\SessionInterface;
use Odan\Session\SessionManagerInterface; use Odan\Session\SessionManagerInterface;
/**
* Defines here are used globally
*/
define('APP_ROOT_DIR', __DIR__ . '/..');
define('APP_SRC_DIR', __DIR__);
define('APP_PUBLIC_DIR', __DIR__ . '/../public');
define('APP_TEMPLATES_DIR', __DIR__ . '/../templates');
define('APP_LOGS_DIR', __DIR__ . '/../var/logs');
define('APP_TEMP_DIR', __DIR__ . '/../var/temp');
class Bootstrap class Bootstrap
{ {
/** /**
@ -39,6 +60,7 @@ class Bootstrap
protected static function initConfig(): Configuration protected static function initConfig(): Configuration
{ {
$config = new Configuration(); $config = new Configuration();
$dotenv = \DotenvVault\DotenvVault::createImmutable(APP_ROOT_DIR);
// set all configuration details // set all configuration details
$config->addSchema('site', SiteInformationSchema::getSchema()); $config->addSchema('site', SiteInformationSchema::getSchema());
@ -74,17 +96,17 @@ class Bootstrap
$config = self::initConfig(); $config = self::initConfig();
$containerBuilder->addDefinitions([ $containerBuilder->addDefinitions([
'config' => $config, 'config' => $config,
// more DI stuff
'flash' => function (ContainerInterface $container) {
return $container->get(SessionInterface::class)->getFlash();
},
LoggerInterface::class => function() { LoggerInterface::class => function() {
$logger = new Logger(); $logger = new Logger();
$logger->pushHandler( $logger->pushHandler(
new StreamHandler(__DIR__ . '/var/logs', Level::Warning) new StreamHandler(APP_LOG_DIR, Level::Warning)
); );
return $logger; return $logger;
}, },
/**
* Session and Flash classes here
*/
SessionManagerInterface::class => function (ContainerInterface $container) { SessionManagerInterface::class => function (ContainerInterface $container) {
return $container->get(SessionInterface::class); return $container->get(SessionInterface::class);
}, },
@ -92,9 +114,31 @@ class Bootstrap
$options = $container->get('config')->get('session'); $options = $container->get('config')->get('session');
return new PhpSession($options); return new PhpSession($options);
}, },
'flash' => function (ContainerInterface $container) {
return $container->get(SessionInterface::class)->getFlash();
},
/**
* Application DI
*/
ResponseFactoryInterface::class => function (ContainerInterface $container) { ResponseFactoryInterface::class => function (ContainerInterface $container) {
return new ResponseFactory(); return new ResponseFactory();
}, },
/**
* Database Connections
*/
/**
* Utility classes
*/
UserAuthorizationInterface::class => function(ContainerInterface $container) {
return new BasicUserAuthorization();
},
/**
* Add the Domain Repositories Here
*/
UserRepositoryInterface::class => function (ContainerInterface $container) { UserRepositoryInterface::class => function (ContainerInterface $container) {
return new UserRepository( return new UserRepository(
$container->get(DatabaseConnectionInterface::class), $container->get(DatabaseConnectionInterface::class),
@ -137,9 +181,8 @@ class Bootstrap
$config = $container->get('config'); $config = $container->get('config');
// Twig // Twig
$templatePath = __DIR__ . "/../templates";
$templateCache = false; $templateCache = false;
$twig = Twig::create($templatePath, [ 'cache' => $templateCache ]); $twig = Twig::create(APP_LOG_DIR, [ 'cache' => $templateCache ]);
// Add the global variables // Add the global variables
$twig->getEnvironment() $twig->getEnvironment()