commit
This commit is contained in:
@@ -3,60 +3,11 @@ declare(strict_types=1);
|
||||
|
||||
namespace App;
|
||||
|
||||
final class Config
|
||||
class Config
|
||||
{
|
||||
public function __construct(
|
||||
public readonly string $env,
|
||||
public readonly string $prefix,
|
||||
public readonly string $primaryDomain,
|
||||
public readonly string $primaryUrl,
|
||||
public readonly string $apiBase,
|
||||
public readonly string $assetVersion,
|
||||
public readonly bool $dbEnabled,
|
||||
public readonly array $db,
|
||||
) {}
|
||||
|
||||
public static function fromPhpConstants(string $configDir): self
|
||||
{
|
||||
// config.php defines these constants.
|
||||
$env = defined('APP_ENV') ? (string) APP_ENV : 'prod';
|
||||
$prefix = defined('APP_PREFIX') ? (string) APP_PREFIX : 'app';
|
||||
$primaryDom = defined('APP_DOMAIN_PRIMARY') ? (string) APP_DOMAIN_PRIMARY : 'example.test';
|
||||
$primaryUrl = defined('APP_URL_PRIMARY') ? (string) APP_URL_PRIMARY : 'https://example.test';
|
||||
$apiBase = defined('APP_API_BASE') ? (string) APP_API_BASE : ($primaryUrl . '/api');
|
||||
$assetVersion = defined('ASSET_VERSION') ? (string) ASSET_VERSION : '';
|
||||
|
||||
$dbEnabled = defined('APP_DB_ENABLED') ? (bool) APP_DB_ENABLED : false;
|
||||
|
||||
$dbFileRoot = rtrim($configDir, '/\\') . DIRECTORY_SEPARATOR . 'db.php';
|
||||
$dbFileEnv = rtrim($configDir, '/\\') . DIRECTORY_SEPARATOR . $env . DIRECTORY_SEPARATOR . 'db.php';
|
||||
$dbFile = file_exists($dbFileRoot) ? $dbFileRoot : (file_exists($dbFileEnv) ? $dbFileEnv : null);
|
||||
$db = $dbFile ? (array) require $dbFile : [];
|
||||
|
||||
return new self(
|
||||
env: $env,
|
||||
prefix: $prefix,
|
||||
primaryDomain: $primaryDom,
|
||||
primaryUrl: rtrim($primaryUrl, '/'),
|
||||
apiBase: rtrim($apiBase, '/'),
|
||||
assetVersion: $assetVersion,
|
||||
dbEnabled: $dbEnabled,
|
||||
db: $db
|
||||
);
|
||||
public array $db,
|
||||
public bool $dbEnabled = true
|
||||
) {
|
||||
}
|
||||
|
||||
public function cookiePrefix(): string
|
||||
{
|
||||
// Example: add suffix for staging
|
||||
if ($this->env === 'staging') {
|
||||
return $this->prefix . '_stg_';
|
||||
}
|
||||
return $this->prefix . '_';
|
||||
}
|
||||
|
||||
public function cookieDomain(): string
|
||||
{
|
||||
// Leading dot for subdomain-wide cookies
|
||||
return '.' . ltrim($this->primaryDomain, '.');
|
||||
}
|
||||
}
|
||||
}
|
||||
28
src/App/functions.php
Normal file
28
src/App/functions.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Lädt ein Template-Partial.
|
||||
*
|
||||
* @param string $name Dateiname ohne .php
|
||||
* @param string $folder Unterordner in /public/partials/
|
||||
* @param array $data Daten, die im Template verfügbar sein sollen
|
||||
*/
|
||||
function tpl(string $name, string $folder = 'landing', array $data = []): void
|
||||
{
|
||||
$path = __DIR__ . '/../../public/partials/' . $folder . '/' . $name . '.php';
|
||||
if (file_exists($path)) {
|
||||
extract($data);
|
||||
require $path;
|
||||
} else {
|
||||
echo "<!-- Template not found: {$folder}/{$name} -->";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* HTML Escaping Helper.
|
||||
*/
|
||||
function e(?string $string): string
|
||||
{
|
||||
return htmlspecialchars($string ?? '', ENT_QUOTES, 'UTF-8');
|
||||
}
|
||||
Reference in New Issue
Block a user