РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
694 of 1361 menu

Класс Finder

Класс Finder предназначен для поиска файлов и директорий в файловой системе. Он позволяет фильтровать результаты по имени, размеру, дате изменения, содержимому и другим параметрам. Первым делом указывается директория поиска методом in, затем накладываются фильтры, а метод getIterator возвращает найденные элементы.

Синтаксис

<?php use Symfony\Component\Finder\Finder; $finder = new Finder(); $finder->in($dir)->files()->name($pattern); $iterator = $finder->getIterator(); ?>

Пример

Давайте найдём все файлы с расширением '.php' в директории 'src':

<?php namespace App\Service; use Symfony\Component\Finder\Finder; class FileService { public function findPhpFiles(): array { $finder = new Finder(); $finder->in('src')->files()->name('*.php'); $res = []; foreach ($finder as $file) { $res[] = $file->getFilename(); } return $res; } } ?>

Результат выполнения кода:

["FileService.php", "ArticleController.php", "Kernel.php"]

Пример

Давайте найдём все директории внутри 'src':

<?php namespace App\Service; use Symfony\Component\Finder\Finder; class FileService { public function findDirectories(): array { $finder = new Finder(); $finder->in('src')->directories(); $res = []; foreach ($finder as $dir) { $res[] = $dir->getFilename(); } return $res; } } ?>

Результат выполнения кода:

["Controller", "Service", "Repository"]

Пример

Давайте отфильтруем файлы по имени с помощью регулярного выражения и отсортируем их:

<?php namespace App\Service; use Symfony\Component\Finder\Finder; class FileService { public function findByName(): array { $finder = new Finder(); $finder ->in('src') ->files() ->name('/^Article/') ->sortByName(); $res = []; foreach ($finder as $file) { $res[] = $file->getRelativePathname(); } return $res; } } ?>

Результат выполнения кода:

["Controller/ArticleController.php", "Entity/Article.php"]

Пример

Давайте исключим служебные директории и воспользуемся пользовательским фильтром через метод filter:

<?php namespace App\Service; use Symfony\Component\Finder\Finder; class FileService { public function findFiltered(): array { $finder = new Finder(); $finder ->in('src') ->files() ->exclude('Kernel') ->filter(function ($file) { return $file->getSize() > 100; }); $res = []; foreach ($finder as $file) { $res[] = $file->getFilename(); } return $res; } } ?>

Результат выполнения кода:

["ArticleController.php", "Article.php"]

Пример

Давайте проверим наличие результатов и посчитаем их количество:

<?php namespace App\Service; use Symfony\Component\Finder\Finder; class FileService { public function countFiles(): int { $finder = new Finder(); $finder->in('src')->files()->name('*.php'); if (!$finder->hasResults()) { return 0; } return $finder->count(); } } ?>

Результат выполнения кода:

3

Смотрите также

  • метод in,
    который задаёт директорию для поиска
  • метод files,
    который ограничивает поиск только файлами
  • метод name,
    который фильтрует элементы по имени
  • метод getIterator,
    который возвращает итератор найденных элементов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить