diff --git a/src/app/app.php b/src/app/app.php index 1fde156..037064d 100644 --- a/src/app/app.php +++ b/src/app/app.php @@ -3,6 +3,7 @@ namespace nulib\app; use nulib\A; use nulib\app\cli\Application; +use nulib\app\config\ProfileManager; use nulib\cl; use nulib\ExitError; use nulib\os\path; @@ -97,7 +98,7 @@ class app { static function params_putenv(): void { $params = serialize(self::get()->getParams()); - putenv("NULIB_APP_app_params=". $params); + putenv("NULIB_APP_app_params=$params"); } static function params_getenv(): ?array { @@ -107,9 +108,7 @@ class app { } static function get_profile(?bool &$productionMode=null): string { - $app = self::get(); - $productionMode = $app->isProductionMode(); - return $app->getProfile(); + return self::get()->getProfile($productionMode); } static function set_profile(?string $profile=null, ?bool $productionMode=null): void { @@ -137,7 +136,6 @@ class app { ] = $params; $cwd = $params["cwd"] ?? null; $datadirIsDefined = true; - $profile = $params["profile"] ?? null; } else { # projdir $projdir = $params["projdir"] ?? null; @@ -190,15 +188,16 @@ class app { if ($logdir === false) $logdir = $params["logdir"] ?? null; if ($logdir === null) $logdir = "log"; $logdir = path::reljoin($datadir, $logdir); - # profile - $profile = getenv("${APPCODE}_PROFILE"); - if ($profile === false) $profile = getenv("APP_PROFILE"); - if ($profile === false) $profile = $params["profile"] ?? null; } # cwd $cwd ??= getcwd(); # profile - $profile ??= $datadirIsDefined? "prod": "devel"; + $this->profileManager = new ProfileManager([ + "app" => true, + "name" => $appcode, + "default_profile" => $datadirIsDefined? "prod": "devel", + "profile" => $params["profile"] ?? null, + ]); $this->projdir = $projdir; $this->vendor = $vendor; @@ -208,7 +207,6 @@ class app { $this->etcdir = $etcdir; $this->vardir = $vardir; $this->logdir = $logdir; - $this->profile = $profile; # name, title $appgroup = $params["appgroup"] ?? null; @@ -283,25 +281,18 @@ class app { return $this->logdir; } - protected string $profile; + protected ProfileManager $profileManager; - function getProfile(): string { - return $this->profile; + function getProfile(?bool &$productionMode=null): string { + return $this->profileManager->getProfile($productionMode); } - protected bool $productionMode; - function isProductionMode(): bool { - return $this->productionMode; + return $this->profileManager->isProductionMode(); } function setProfile(?string $profile, ?bool $productionMode=null): void { - $profile ??= $this->profile; - $this->profile = $profile; - if ($productionMode === null) { - $productionMode = $profile === "prod" || $profile === "test"; - } - $this->productionMode = $productionMode; + $this->profileManager->setProfile($profile, $productionMode); } /** @@ -312,7 +303,7 @@ class app { */ function withProfile(string $file, $profile): string { if ($profile !== false) { - if ($profile === null) $profile = $this->getProfile(); + $profile ??= $this->getProfile(); [$dir, $filename] = path::split($file); $basename = path::basename($filename); $ext = path::ext($file); @@ -386,7 +377,7 @@ class app { "etcdir" => $this->etcdir, "vardir" => $this->vardir, "logdir" => $this->logdir, - "profile" => $this->le, + "profile" => $this->getProfile(), "appgroup" => $this->appgroup, "name" => $this->name, "title" => $this->title, diff --git a/src/app/config.php b/src/app/config.php index 5c2ac91..e0f21d1 100644 --- a/src/app/config.php +++ b/src/app/config.php @@ -10,15 +10,6 @@ use nulib\cl; */ class config { protected static ConfigManager $config; - protected static ProfileManager $profile; - - static function init(string $appcode): void { - self::$config = new ConfigManager(); - self::$profile = new ProfileManager([ - "app" => true, - "name" => $appcode, - ]); - } static function init_configurator($configurators): void { self::$config->addConfigurators(cl::with($configurators)); @@ -28,3 +19,9 @@ class config { self::$config->configure($params); } } + +new class extends config { + function __construct() { + self::$config = new ConfigManager(); + } +}; \ No newline at end of file diff --git a/src/app/config/ProfileManager.php b/src/app/config/ProfileManager.php index 0d380e1..6645906 100644 --- a/src/app/config/ProfileManager.php +++ b/src/app/config/ProfileManager.php @@ -55,6 +55,12 @@ class ProfileManager { $this->envKeys = [$envKey]; } } + $this->defaultProfile = $params["default_profile"] ?? null; + $profile = $params["profile"] ?? null; + $productionMode = $params["production_mode"] ?? null; + $productionMode ??= $this->productionModes[$profile] ?? false; + $this->profile = $profile; + $this->productionMode = $productionMode; } /** @@ -89,7 +95,7 @@ class ProfileManager { return null; } - protected ?string $defaultProfile = null; + protected ?string $defaultProfile; function getDefaultProfile(): ?string { return $this->defaultProfile; @@ -99,9 +105,9 @@ class ProfileManager { $this->defaultProfile = $profile; } - protected ?string $profile = null; + protected ?string $profile; - protected bool $productionMode = false; + protected bool $productionMode; protected function resolveProfile(): void { $profile ??= $this->getenvProfile(); @@ -122,6 +128,10 @@ class ProfileManager { return $this->profile; } + function isProductionMode(): bool { + return $this->productionMode; + } + function setProfile(?string $profile=null, ?bool $productionMode=null): void { if ($profile === null) $this->profile = null; $profile ??= $this->getProfile($productionMode); diff --git a/tests/appTest.php b/tests/app/appTest.php similarity index 89% rename from tests/appTest.php rename to tests/app/appTest.php index 092b012..03ae6f0 100644 --- a/tests/appTest.php +++ b/tests/app/appTest.php @@ -1,10 +1,10 @@ "$projdir/vendor/bin", "autoload" => "$projdir/vendor/autoload.php", ], - "appcode" => "nur-sery", + "appcode" => "nur-ture", "cwd" => $cwd, "datadir" => "$projdir/devel", "etcdir" => "$projdir/devel/etc", @@ -38,7 +38,7 @@ namespace nulib { "bindir" => "$projdir/vendor/bin", "autoload" => "$projdir/vendor/autoload.php", ], - "appcode" => "nur-sery", + "appcode" => "nur-ture", "cwd" => $cwd, "datadir" => "$projdir/devel", "etcdir" => "$projdir/devel/etc", @@ -63,7 +63,7 @@ namespace nulib { "bindir" => "$projdir/vendor/bin", "autoload" => "$projdir/vendor/autoload.php", ], - "appcode" => "nur-sery", + "appcode" => "nur-ture", "cwd" => $cwd, "datadir" => "$projdir/devel", "etcdir" => "$projdir/devel/etc", @@ -82,7 +82,7 @@ namespace nulib { "bindir" => "$projdir/vendor/bin", "autoload" => "$projdir/vendor/autoload.php", ], - "appcode" => "nur-sery", + "appcode" => "nur-ture", "cwd" => $cwd, "datadir" => "$projdir/devel", "etcdir" => "$projdir/devel/etc", @@ -97,14 +97,14 @@ namespace nulib { } } -namespace nulib\impl { +namespace nulib\app\impl { use nulib\app\cli\Application; use nulib\os\path; use nulib\app\app; class config { - const PROJDIR = __DIR__.'/..'; + const PROJDIR = __DIR__.'/../..'; static function get_projdir(): string { return path::abspath(self::PROJDIR);