function DrupalKernel::discoverServiceProviders

Same name in other branches
  1. 9 core/lib/Drupal/Core/DrupalKernel.php \Drupal\Core\DrupalKernel::discoverServiceProviders()
  2. 8.9.x core/lib/Drupal/Core/DrupalKernel.php \Drupal\Core\DrupalKernel::discoverServiceProviders()
  3. 11.x core/lib/Drupal/Core/DrupalKernel.php \Drupal\Core\DrupalKernel::discoverServiceProviders()

Overrides DrupalKernelInterface::discoverServiceProviders

1 call to DrupalKernel::discoverServiceProviders()
DrupalKernel::initializeServiceProviders in core/lib/Drupal/Core/DrupalKernel.php
Registers all service providers to the kernel.
2 methods override DrupalKernel::discoverServiceProviders()
TestRunnerKernel::discoverServiceProviders in core/lib/Drupal/Core/Test/TestRunnerKernel.php
Discovers available serviceProviders.
UpdateKernel::discoverServiceProviders in core/lib/Drupal/Core/Update/UpdateKernel.php
Discovers available serviceProviders.

File

core/lib/Drupal/Core/DrupalKernel.php, line 638

Class

DrupalKernel
The DrupalKernel class is the core of Drupal itself.

Namespace

Drupal\Core

Code

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', []));
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.