Метод followLinks
Метод followLinks класса Finder
указывает Finder'у следовать по символическим
ссылкам (symlinks) в процессе обхода файловой
системы. По умолчанию Finder не переходит по
таким ссылкам, поэтому директории, являющиеся
симлинками, игнорируются. Вызов этого метода
включает их обход, позволяя находить файлы,
расположенные за пределами основной директории.
Метод не принимает параметров и возвращает
экземпляр Finder для создания цепочки вызовов.
Синтаксис
$finder->followLinks();
Пример
Давайте создадим директорию 'data' и
символическую ссылку 'data/link',
указывающую на другую директорию с файлами.
Сначала посмотрим результат без включения
перехода по ссылкам:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpFoundation\Response;
class FinderController extends AbstractController
{
public function index(): Response
{
$finder = new Finder();
$finder->files()->in('data');
$res = [];
foreach ($finder as $file) {
$res[] = $file->getFilename();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"abcde.txt"
Пример
Теперь включим переход по символическим
ссылкам с помощью метода followLinks:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpFoundation\Response;
class FinderController extends AbstractController
{
public function index(): Response
{
$finder = new Finder();
$finder->files()->in('data')->followLinks();
$res = [];
foreach ($finder as $file) {
$res[] = $file->getFilename();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"abcde.txt", "hello.txt"
Как видите, после вызова followLinks
Finder обошёл символическую ссылку и нашёл файл
'hello.txt', расположенный в другой
директории.
Пример
Метод followLinks можно комбинировать
с другими методами фильтрации. Давайте найдём
только файлы с расширением '.txt'
среди ссылок:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpFoundation\Response;
class FinderController extends AbstractController
{
public function index(): Response
{
$finder = new Finder();
$finder
->files()
->name('*.txt')
->in('data')
->followLinks();
$res = [];
foreach ($finder as $file) {
$res[] = $file->getFilename();
}
return new Response(implode(', ', $res));
}
}
?>
Результат выполнения кода:
"abcde.txt", "hello.txt"
Смотрите также
-
класс
Finder,
который выполняет поиск файлов и директорий -
метод
files,
который ограничивает поиск только файлами -
метод
in,
который задаёт директорию для поиска -
метод
ignoreDotFiles,
который исключает скрытые файлы из результатов