documentFactory = $documentFactory ?? new DocumentFactory(); } /** * @return Collection|Document[] */ public function findDocuments(string $directory): Collection { $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($directory), RecursiveIteratorIterator::SELF_FIRST ); $documents = []; foreach ($iterator as $file) { if ($this->validate($file)) { $documents[] = $this->documentFactory->createDocument($file); } } return collect($documents); } private function validate(SplFileInfo $file): bool { return $file->isFile() && preg_match('/.pdf$/i', $file->getBasename()); } }