Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Plugin.php

function Plugin::serviceProvidersFromAutoloadFiles

1 call to Plugin::serviceProvidersFromAutoloadFiles()
Plugin::serviceProviders in vendor/tbachert/spi/src/Composer/Plugin.php

File

vendor/tbachert/spi/src/Composer/Plugin.php, line 215

Class

Plugin

Namespace

Nevay\SPI\Composer

Code

private function serviceProvidersFromAutoloadFiles(PackageInterface $package, array &$mappings, string $installPath, IOInterface $io) : void {
    $autoloadFiles = $package->getAutoload()['files'] ?? [];
    $spiAutoloadFiles = $package->getExtra()['spi-config']['autoload-files'] ?? false ?: [];
    $spiPruneAutoloadFiles = $package->getExtra()['spi-config']['prune-autoload-files'] ?? null;
    if ($spiAutoloadFiles === true) {
        $spiAutoloadFiles = $autoloadFiles;
    }
    if ($spiPruneAutoloadFiles === true) {
        $spiPruneAutoloadFiles = $spiAutoloadFiles;
    }
    $includeFile = (static fn(string $file) => require $file)->bindTo(null, null);
    foreach ($spiAutoloadFiles as $index => $file) {
        $io->debug(sprintf('Loading service providers from "%s" (%s)', $file, $package->getPrettyString()));
        if (!($includedProviders = ServiceLoader::collectProviders($includeFile, $installPath . '/' . $file))) {
            unset($spiAutoloadFiles[$index]);
            continue;
        }
        foreach ($includedProviders as $service => $providers) {
            $mappings[$service] ??= [];
            $mappings[$service] += array_fill_keys($providers, $package->getPrettyString() . ' (' . json_encode($file, flags: JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . ')');
        }
    }
    $spiPruneAutoloadFiles ??= $spiAutoloadFiles;
    if ($spiPruneAutoloadFiles && $autoloadFiles && $package instanceof Package) {
        $io->debug(sprintf('Pruning autoload.files (%s): %s', $package->getPrettyString(), implode(', ', $spiPruneAutoloadFiles)));
        $autoload = $package->getAutoload();
        $autoload['files'] = array_diff($autoloadFiles, $spiPruneAutoloadFiles);
        $package->setAutoload($autoload);
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal