51 lines
1.5 KiB
PHP
51 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Nest\Database\Configuration;
|
|
|
|
use Nest\Database\Database;
|
|
use Nest\Database\Exceptions\Configuration\MissingRequiredConfigurationValueException;
|
|
|
|
/**
|
|
* Create a database object from a configuration array.
|
|
*/
|
|
abstract class DatabaseFactory
|
|
{
|
|
/**
|
|
* @param string $databaseIdentifier Database identifier.
|
|
* @param array $configuration Database configuration array.
|
|
*/
|
|
public function __construct(protected string $databaseIdentifier, protected array $configuration)
|
|
{}
|
|
|
|
/**
|
|
* Get a required configuration value.
|
|
* @param string $configKey Configuration key.
|
|
* @return mixed Configuration value.
|
|
* @throws MissingRequiredConfigurationValueException
|
|
*/
|
|
public function getRequiredConfig(string $configKey): mixed
|
|
{
|
|
if (!isset($this->configuration[$configKey]))
|
|
throw new MissingRequiredConfigurationValueException($this->databaseIdentifier, static::class, $configKey);
|
|
|
|
return $this->configuration[$configKey];
|
|
}
|
|
|
|
/**
|
|
* Get an optional configuration value.
|
|
* @param string $configKey Configuration key.
|
|
* @param mixed|null $default Default configuration value.
|
|
* @return mixed Configuration value.
|
|
*/
|
|
public function getOptionalConfig(string $configKey, mixed $default = null): mixed
|
|
{
|
|
return $this->configuration[$configKey] ?? $default;
|
|
}
|
|
|
|
/**
|
|
* Make the database object from its configuration array.
|
|
* @return Database The created database.
|
|
* @throws MissingRequiredConfigurationValueException
|
|
*/
|
|
public abstract function make(): Database;
|
|
}
|