public function DrupalKernel::discoverServiceProviders in Drupal 10
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/DrupalKernel.php \Drupal\Core\DrupalKernel::discoverServiceProviders()
- 9 core/lib/Drupal/Core/DrupalKernel.php \Drupal\Core\DrupalKernel::discoverServiceProviders()
Discovers available serviceProviders.
Return value
array The available serviceProviders.
Overrides DrupalKernelInterface::discoverServiceProviders
1 call to DrupalKernel::discoverServiceProviders()
- DrupalKernel::initializeServiceProviders in core/
lib/ Drupal/ Core/ DrupalKernel.php - Registers all service providers to the kernel.
File
- core/
lib/ Drupal/ Core/ DrupalKernel.php, line 577
Class
- DrupalKernel
- The DrupalKernel class is the core of Drupal itself.
Namespace
Drupal\CoreCode
public function discoverServiceProviders() {
$this->serviceYamls = [
'app' => [],
'site' => [],
];
$this->serviceProviderClasses = [
'app' => [],
'site' => [],
];
$this->serviceYamls['app']['core'] = 'core/core.services.yml';
$this->serviceProviderClasses['app']['core'] = 'Drupal\\Core\\CoreServiceProvider';
// Retrieve enabled modules and register their namespaces.
if (!isset($this->moduleList)) {
$extensions = $this
->getConfigStorage()
->read('core.extension');
// If core.extension configuration does not exist and we're not in the
// installer itself, then we need to put the kernel into a pre-installer
// mode. The container should not be dumped because Drupal is yet to be
// installed. The installer service provider is registered to ensure that
// cache and other automatically created tables are not created if
// database settings are available. None of this is required when the
// installer is running because the installer has its own kernel and
// manages the addition of its own service providers.
// @see install_begin_request()
if ($extensions === FALSE && !InstallerKernel::installationAttempted()) {
$this->allowDumping = FALSE;
$this->containerNeedsDumping = FALSE;
$GLOBALS['conf']['container_service_providers']['InstallerServiceProvider'] = 'Drupal\\Core\\Installer\\InstallerServiceProvider';
}
$this->moduleList = $extensions['module'] ?? [];
}
$module_filenames = $this
->getModuleFileNames();
$this
->classLoaderAddMultiplePsr4($this
->getModuleNamespacesPsr4($module_filenames));
// Load each module's serviceProvider class.
foreach ($module_filenames as $module => $filename) {
$camelized = ContainerBuilder::camelize($module);
$name = "{$camelized}ServiceProvider";
$class = "Drupal\\{$module}\\{$name}";
if (class_exists($class)) {
$this->serviceProviderClasses['app'][$module] = $class;
}
$filename = dirname($filename) . "/{$module}.services.yml";
if (file_exists($filename)) {
$this->serviceYamls['app'][$module] = $filename;
}
}
// Add site-specific service providers.
if (!empty($GLOBALS['conf']['container_service_providers'])) {
foreach ($GLOBALS['conf']['container_service_providers'] as $class) {
if (is_string($class) && class_exists($class) || is_object($class) && ($class instanceof ServiceProviderInterface || $class instanceof ServiceModifierInterface)) {
$this->serviceProviderClasses['site'][] = $class;
}
}
}
$this
->addServiceFiles(Settings::get('container_yamls', []));
}