function HookCollectorPass::writeImplementationsToContainer

Writes all implementations to the container.

Parameters

\Symfony\Component\DependencyInjection\ContainerBuilder $container: The container builder.

array<string, array<string, string>> $implementationsByHook: Implementations, as module names keyed by hook name and "$class::$method" identifier.

1 call to HookCollectorPass::writeImplementationsToContainer()
HookCollectorPass::writeToContainer in core/lib/Drupal/Core/Hook/HookCollectorPass.php
Writes collected definitions to the container builder.

File

core/lib/Drupal/Core/Hook/HookCollectorPass.php, line 307

Class

HookCollectorPass
Collects and registers hook implementations.

Namespace

Drupal\Core\Hook

Code

protected static function writeImplementationsToContainer(ContainerBuilder $container, array $implementationsByHook) : void {
    $map = [];
    $tagsInfoByClass = [];
    foreach ($implementationsByHook as $hook => $hookImplementations) {
        $priority = 0;
        foreach ($hookImplementations as $class_and_method => $module) {
            [
                $class,
                $method,
            ] = explode('::', $class_and_method);
            $tagsInfoByClass[$class][] = [
                'event' => "drupal_hook.{$hook}",
                'method' => $method,
                'priority' => $priority,
            ];
            --$priority;
            $map[$hook][$class][$method] = $module;
        }
    }
    foreach ($tagsInfoByClass as $class => $tagsInfo) {
        if ($container->hasDefinition($class)) {
            $definition = $container->findDefinition($class);
        }
        else {
            $definition = $container->register($class, $class)
                ->setAutowired(TRUE);
        }
        foreach ($tagsInfo as $tag_info) {
            $definition->addTag('kernel.event_listener', $tag_info);
        }
    }
    $container->setParameter('hook_implementations_map', $map);
}

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