CredentialsProvider.php
Pfad: src/Infrastructure/Config/CredentialsProvider.php
Ext: php
Größe: 1557 Bytes
Geändert: 2026-07-15 16:12:37+02
<?php
declare(strict_types=1);
namespace Demo\Infrastructure\Config;
use RuntimeException;
/**
* Laedt Datenbank-Credentials aus der Datei db.json eines Verzeichnisses.
* Das Verzeichnis wird injiziert (aus der Umgebung), nie hartkodiert.
*/
final class CredentialsProvider
{
/** @var string Verzeichnis, das die Datei db.json enthaelt. */
private string $directory;
/**
* Bindet den Provider an das Credentials-Verzeichnis.
*
* @param string $directory Absolutes Verzeichnis mit der Datei db.json.
*/
public function __construct(string $directory)
{
$this->directory = rtrim($directory, '/');
}
/**
* Liest und validiert die Datenbank-Credentials.
*
* @return DatabaseCredentials Geladene Verbindungsdaten.
* @throws RuntimeException Wenn die Datei fehlt oder unvollstaendig ist.
*/
public function database(): DatabaseCredentials
{
$file = $this->directory . '/db.json';
$raw = is_file($file) ? (string) file_get_contents($file) : '';
if ($raw === '') {
throw new RuntimeException(__METHOD__ . ': db.json nicht lesbar');
}
$data = json_decode($raw, true);
if (!is_array($data) || !isset($data['dsn'], $data['user'], $data['password'])) {
throw new RuntimeException(__METHOD__ . ': db.json unvollstaendig');
}
return new DatabaseCredentials(
(string) $data['dsn'],
(string) $data['user'],
(string) $data['password']
);
}
}