public static function Database::convertDbUrlToConnectionInfo in Drupal 9
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/Database/Database.php \Drupal\Core\Database\Database::convertDbUrlToConnectionInfo()
Converts a URL to a database connection info array.
Parameters
string $url: The URL.
string $root: The root directory of the Drupal installation.
Return value
array The database connection info.
Throws
\InvalidArgumentException Exception thrown when the provided URL does not meet the minimum requirements.
\RuntimeException Exception thrown when a module provided database driver does not exist.
11 calls to Database::convertDbUrlToConnectionInfo()
- DbCommandBase::getDatabaseConnection in core/
lib/ Drupal/ Core/ Command/ DbCommandBase.php - Parse input options decide on a database.
- KernelTestBase::getDatabaseConnectionInfo in core/
tests/ Drupal/ KernelTests/ KernelTestBase.php - Returns the Database connection info to be used for this test.
- KernelTestBaseDatabaseDriverModuleTest::getDatabaseConnectionInfo in core/
tests/ Drupal/ KernelTests/ KernelTestBaseDatabaseDriverModuleTest.php - Returns the Database connection info to be used for this test.
- TestSetupTrait::changeDatabasePrefix in core/
lib/ Drupal/ Core/ Test/ TestSetupTrait.php - Changes the database connection to the prefixed one.
- TestSetupTraitTest::testChangeDatabasePrefix in core/
tests/ Drupal/ Tests/ Core/ Test/ TestSetupTraitTest.php - Tests the SIMPLETEST_DB environment variable is used.
File
- core/
lib/ Drupal/ Core/ Database/ Database.php, line 459
Class
- Database
- Primary front-controller for the database system.
Namespace
Drupal\Core\DatabaseCode
public static function convertDbUrlToConnectionInfo($url, $root) {
// Check that the URL is well formed, starting with 'scheme://', where
// 'scheme' is a database driver name.
if (preg_match('/^(.*):\\/\\//', $url, $matches) !== 1) {
throw new \InvalidArgumentException("Missing scheme in URL '{$url}'");
}
$driver = $matches[1];
// Determine if the database driver is provided by a module.
$module = NULL;
$connection_class = NULL;
$url_components = parse_url($url);
if (isset($url_components['query'])) {
parse_str($url_components['query'], $query);
if (isset($query['module']) && $query['module']) {
$module = $query['module'];
// Set up an additional autoloader. We don't use the main autoloader as
// this method can be called before Drupal is installed and is never
// called during regular runtime.
$namespace = "Drupal\\{$module}\\Driver\\Database\\{$driver}";
$psr4_base_directory = Database::findDriverAutoloadDirectory($namespace, $root, TRUE);
$additional_class_loader = new ClassLoader();
$additional_class_loader
->addPsr4($namespace . '\\', $psr4_base_directory);
$additional_class_loader
->register(TRUE);
$connection_class = $custom_connection_class = $namespace . '\\Connection';
}
}
if (!$module) {
// Determine the connection class to use. Discover if the URL has a valid
// driver scheme. Try with Drupal 8 style custom drivers first, since
// those can override/extend the core ones.
$connection_class = $custom_connection_class = "Drupal\\Driver\\Database\\{$driver}\\Connection";
if (!class_exists($connection_class)) {
// If the URL is not relative to a custom driver, try with core ones.
$connection_class = "Drupal\\Core\\Database\\Driver\\{$driver}\\Connection";
}
}
if (!class_exists($connection_class)) {
throw new \InvalidArgumentException("Can not convert '{$url}' to a database connection, class '{$custom_connection_class}' does not exist");
}
$options = $connection_class::createConnectionOptionsFromUrl($url, $root);
// If the driver is provided by a module add the necessary information to
// autoload the code.
// @see \Drupal\Core\Site\Settings::initialize()
if (isset($psr4_base_directory)) {
$options['autoload'] = $psr4_base_directory;
}
return $options;
}