symfony 7.1 的 finder 组件默认递归查找,指定根目录即自动遍历子目录;支持多后缀匹配、正则筛选、路径排除及按时间/大小过滤,api 向后兼容且不依赖完整框架。

Symfony 7.1 的 Finder 组件默认就是递归查找的,无需额外开启“递归开关”——只要指定根目录,它会自动遍历所有子目录。
基础用法:找所有 .php 文件
这是最常用场景,代码简洁直观:
use Symfony\Component\Finder\Finder;
$finder = Finder::create()
->files() // 只匹配文件(跳过目录)
->name('*.php') // 匹配后缀为 .php 的文件
->in(__DIR__); // 从当前目录开始,含所有子目录
foreach ($finder as $file) {
echo $file->getRealPath() . "\n";
}
支持多个后缀或模糊匹配
可用数组传入多种扩展名,也支持 basename 级别的通配(如 config.*):
->name(['*.php', '*.yaml', '*.env'])-
->name('config.*')—— 匹配 config.php、config.yaml 等 -
->name('/^Route.*\.php$/i')—— 正则匹配,大小写不敏感
限定范围与排除干扰
避免扫描 vendor、node_modules 等无关目录,提升效率和准确性:
-
->notPath('/vendor|node_modules|var\/cache/')—— 正则排除路径 ->depth(' —— 限制最多深入 2 层子目录(0 是当前层)-
->exclude(['tests', 'Fixtures'])—— 排除指定目录名(自动跳过)
按修改时间或大小进一步筛选
结合业务需要做二次过滤,比如只处理最近改动的配置文件:
->date('since 2 days ago')->size(' 或 <code>->size('> 1M')-
->sortByModifiedTime()->first()—— 取最新修改的那个文件
Finder 在 Symfony 7.1 中保持向后兼容,API 无破坏性变更。只要 Composer 已安装 symfony/finder(v7.1+),上述写法可直接运行,不依赖完整框架。











