function HookCollectorBase::getHookFileIterator

Gets the files that can contain hook implementations.

Parameters

string $dir: The extension directory.

list<string> $procedural_files: The root-level procedural hook implementation files.

Return value

\Generator<\SplFileInfo> The procedural hook files and PHP files in src/Hook.

File

core/lib/Drupal/Core/Hook/HookCollectorBase.php, line 28

Class

HookCollectorBase
Provides shared hook collection functionality.

Namespace

Drupal\Core\Hook

Code

protected function getHookFileIterator(string $dir, array $procedural_files) : \Generator {
  foreach ($procedural_files as $filename) {
    $filename = "{$dir}/{$filename}";
    if (is_file($filename)) {
      yield new \SplFileInfo($filename);
    }
  }
  $hook_directory = "{$dir}/src/Hook";
  if (!is_dir($hook_directory)) {
    return;
  }
  $flags = \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS | \FilesystemIterator::FOLLOW_SYMLINKS;
  $iterator = new \RecursiveDirectoryIterator($hook_directory, $flags);
  $iterator = new \RecursiveCallbackFilterIterator($iterator, static fn(\SplFileInfo $fileinfo): bool => $fileinfo->isDir() || $fileinfo->getExtension() === 'php');
  foreach (new \RecursiveIteratorIterator($iterator) as $fileinfo) {
    yield $fileinfo;
  }
}

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