Files
tonehaus/config/packages/doctrine.php
boris 336dcc4d3a
All checks were successful
CI (Gitea) / php-tests (push) Successful in 10m23s
CI (Gitea) / docker-image (push) Successful in 3m3s
erm
2025-11-28 03:23:52 +00:00

57 lines
1.9 KiB
PHP

<?php
declare(strict_types=1);
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Config\DoctrineConfig;
use function Symfony\Component\DependencyInjection\Loader\Configurator\param;
return static function (DoctrineConfig $doctrine): void {
$driver = strtolower((string) ($_ENV['DATABASE_DRIVER'] ?? $_SERVER['DATABASE_DRIVER'] ?? 'postgres'));
$supportedDrivers = ['postgres', 'sqlite'];
if (!in_array($driver, $supportedDrivers, true)) {
throw new \InvalidArgumentException(sprintf(
'Unsupported DATABASE_DRIVER "%s". Allowed values: %s',
$driver,
implode(', ', $supportedDrivers)
));
}
$dbal = $doctrine->dbal();
$dbal->defaultConnection('default');
$connection = $dbal->connection('default');
$connection->profilingCollectBacktrace(param('kernel.debug'));
$connection->useSavepoints(true);
if ('sqlite' === $driver) {
$connection->driver('pdo_sqlite');
$hasCustomPath = array_key_exists('DATABASE_SQLITE_PATH', $_ENV)
|| array_key_exists('DATABASE_SQLITE_PATH', $_SERVER);
if ($hasCustomPath) {
$connection->path('%env(resolve:DATABASE_SQLITE_PATH)%');
} else {
$projectDir = dirname(__DIR__, 2);
$databasePath = sprintf('%s/var/data/database.sqlite', $projectDir);
$databaseDir = dirname($databasePath);
$filesystem = new Filesystem();
if (!$filesystem->exists($databaseDir)) {
$filesystem->mkdir($databaseDir, 0o775);
}
if (!$filesystem->exists($databasePath)) {
$filesystem->touch($databasePath);
}
$connection->path('%kernel.project_dir%/var/data/database.sqlite');
}
} else {
$connection->url('%env(resolve:DATABASE_URL)%');
$connection->serverVersion('16');
$connection->charset('utf8');
}
};