pathResolver = $pathResolver; } protected function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults([ 'limit' => 15, //Given only 15 entries 'filename_filter' => '', //Filter the filenames. For example *.jpg to only get jpegs. Can also be an array 'placeholders' => Attachment::BUILTIN_PLACEHOLDER, //By default use all builtin ressources ]); } public function find(string $keyword, array $options = []) : array { $finder = new Finder(); $resolver = new OptionsResolver(); $this->configureOptions($resolver); $options = $resolver->resolve($options); if (empty($options['placeholders'])) { return []; } //We search only files $finder->files(); //Add the folder for each placeholder foreach ($options['placeholders'] as $placeholder) { $tmp = $this->pathResolver->placeholderToRealPath($placeholder); //Ignore invalid/deactivated placeholders: if ($tmp !== null) { $finder->in($tmp); } } //Apply filter if needed if (!empty($options['filename_filter'])) { $finder->name($options['filename_filter']); } $finder->path($keyword); $arr = []; $limit = $options['limit']; foreach ($finder as $file) { if ($limit <= 0) { break; } $arr[] = $this->pathResolver->realPathToPlaceholder($file->getPathname()); $limit--; } return $arr; } }