function HookCollectorPass::writeToContainer

Writes collected definitions to the container builder.

Parameters

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

File

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

Class

HookCollectorPass
Collects and registers hook implementations.

Namespace

Drupal\Core\Hook

Code

protected function writeToContainer(ContainerBuilder $container) : void {
  $container->register(ProceduralCall::class, ProceduralCall::class)
    ->addArgument($this->includes);
  // Gather includes for each hook_hook_info group. Store this in
  // $groupIncludes so the module handler includes the files at runtime when
  // the hooks are invoked.
  $groupIncludes = [];
  foreach ($this->hookInfo as $function) {
    foreach ($function() as $hook => $info) {
      if (isset($this->groupIncludes[$info['group']])) {
        $groupIncludes[$hook] = $this->groupIncludes[$info['group']];
      }
    }
  }
  $implementationsByHook = $this->calculateImplementations();
  static::writeImplementationsToContainer($container, $implementationsByHook);
  $container->setParameter('preprocess_for_suggestions', $this->preprocessForSuggestions ?? []);
  // Update the module handler definition.
  $definition = $container->getDefinition('module_handler');
  $definition->setArgument('$groupIncludes', $groupIncludes);
  $packed_order_operations = [];
  $order_operations = $this->getOrderOperations();
  foreach (preg_grep('@_alter$@', array_keys($order_operations)) as $alter_hook) {
    $packed_order_operations[$alter_hook] = array_map(fn(OrderOperation $operation) => $operation->pack(), $order_operations[$alter_hook]);
  }
  $definition->setArgument('$packedOrderOperations', $packed_order_operations);
}

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