pattern = $pattern ?? sprintf( '#^.+\\%s[^\\%s]+\\.php$#i', DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, ); } /** @return string[] */ public function findMigrations(string $directory, string|null $namespace = null): array { $dir = $this->getRealPath($directory); return $this->loadMigrations( $this->getMatches($this->createIterator($dir)), $namespace, ); } private function createIterator(string $dir): RegexIterator { return new RegexIterator( new RecursiveIteratorIterator( new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS | FilesystemIterator::FOLLOW_SYMLINKS), RecursiveIteratorIterator::LEAVES_ONLY, ), $this->getPattern(), RegexIterator::GET_MATCH, ); } private function getPattern(): string { return $this->pattern; } /** @return string[] */ private function getMatches(RegexIterator $iteratorFilesMatch): array { $files = []; foreach ($iteratorFilesMatch as $file) { $files[] = $file[0]; } return $files; } }