yieldTemplates($path, $templateName, $folderName); } } private function yieldTemplates(string $path, string $templateName, string $folderName): iterable { foreach (new \FilesystemIterator($path) as $file) { if (is_dir($file->getPathname())) { yield from $this->yieldTemplates($file->getPathname(), $templateName, $folderName); } else { if ($file->getFilename() == $templateName) { preg_match("#{$folderName}/[^/]+#", $file->getPathname(), $matches); yield $matches[0].'/'.$file->getFilename(); } } } } }