symplify / smart-file-system
Requires
- php: >=8.1
- nette/utils: ^3.2
- symfony/filesystem: ^6.2
- symfony/finder: ^6.2
- symplify/easy-testing: ^11.1
Requires (Dev)
- php-parallel-lint/php-parallel-lint: ^1.3
- phpstan/extension-installer: ^1.2
- phpunit/phpunit: ^9.5.26
- rector/rector: ^0.15.10
- symplify/easy-ci: ^11.1
- symplify/easy-coding-standard: ^11.1
- symplify/phpstan-extensions: ^11.1
- symplify/phpstan-rules: 11.2.3.72
- symplify/symplify-kernel: ^11.1
- tomasvotruba/unused-public: ^0.0.34
- dev-main / 11.2.x-dev
- 11.1.26
- 11.1.25
- 11.1.24
- 11.1.23
- 11.1.22
- 11.1.21
- 11.1.20
- 11.1.19
- 11.1.18
- 11.1.17
- 11.1.16
- 11.1.15
- 11.1.14
- 11.1.13
- 11.1.12
- 11.1.11
- 11.1.10
- 11.1.9
- 11.1.8
- 11.1.7
- 11.1.6
- 11.1.5
- 11.1.4
- 11.1.3
- 11.1.2
- 11.1.1
- 11.1.0
- 11.0.9
- 11.0.8
- 11.0.7
- 11.0.6
- 11.0.5
- 11.0.4
- 11.0.3
- 11.0.2
- 11.0.1
- 11.0.0
- 10.3.3
- 10.3.2
- 10.3.1
- 10.3.0
- 10.2.11
- 10.2.10
- 10.2.9
- 10.2.8
- 10.2.7
- 10.2.6
- 10.2.5
- 10.2.4
- 10.2.3
- 10.2.2
- 10.2.1
- 10.2.0
- 10.1.4
- 10.1.3
- 10.1.2
- 10.1.1
- 10.1.0
- 10.0.25
- 10.0.24
- 10.0.23
- 10.0.22
- 10.0.21
- 10.0.20
- 10.0.19
- 10.0.18
- 10.0.17
- 10.0.16
- 10.0.15
- 10.0.14
- 10.0.13
- 10.0.12
- 10.0.11
- 10.0.10
- 10.0.9
- 10.0.8
- 10.0.7
- 10.0.6
- 10.0.5
- 10.0.4
- 10.0.3
- 10.0.2
- 10.0.1
- 10.0.0
- 10.0.0-beta17
- 10.0.0-beta16
- 10.0.0-beta15
- 10.0.0-beta14
- 10.0.0-beta13
- 10.0.0-beta12
- 10.0.0-beta11
- 10.0.0-beta10
- 10.0.0-beta9
- 10.0.0-beta8
- 10.0.0-beta7
- 10.0.0-beta6
- 10.0.0-beta5
- 10.0.0-beta4
- 10.0.0-beta3
- 10.0.0-beta2
- 10.0.0-beta1
- 9.4.70
- 9.4.69
- 9.4.68
- 9.4.67
- 9.4.66
- 9.4.65
- 9.4.64
- 9.4.63
- 9.4.62
- 9.4.61
- 9.4.60
- 9.4.59
- 9.4.58
- 9.4.57
- 9.4.56
- 9.4.55
- 9.4.54
- 9.4.53
- 9.4.52
- 9.4.51
- 9.4.50
- 9.4.49
- 9.4.48
- 9.4.47
- 9.4.46
- 9.4.45
- 9.4.44
- 9.4.43
- 9.4.42
- 9.4.41
- 9.4.40
- 9.4.39
- 9.4.38
- 9.4.37
- 9.4.36
- 9.4.35
- 9.4.34
- 9.4.33
- 9.4.32
- 9.4.31
- 9.4.30
- 9.4.29
- 9.4.28
- 9.4.27
- 9.4.26
- 9.4.25
- 9.4.24
- 9.4.23
- 9.4.22
- 9.4.21
- 9.4.20
- 9.4.19
- 9.4.18
- 9.4.17
- 9.4.16
- 9.4.15
- 9.4.14
- 9.4.13
- 9.4.12
- 9.4.11
- 9.4.10
- 9.4.9
- 9.4.8
- 9.4.7
- 9.4.6
- 9.4.5
- 9.4.4
- 9.4.3
- 9.4.2
- v9.4.1
- v9.4.0
- v9.3.27
- v9.3.26
- v9.3.25
- v9.3.24
- v9.3.23
- v9.3.22
- v9.3.21
- v9.3.20
- v9.3.19
- v9.3.18
- v9.3.17
- v9.3.16
- v9.3.15
- v9.3.14
- v9.3.13
- v9.3.12
- v9.3.11
- v9.3.10
- v9.3.8
- v9.3.6
- v9.3.5
- v9.3.4
- v9.3.3
- v9.3.1
- v9.3.0
- v9.2.24
- v9.2.23
- v9.2.22
- v9.2.21
- v9.2.20
- v9.2.19
- v9.2.18
- v9.2.17
- v9.2.16
- v9.2.15
- v9.2.14
- v9.2.13
- v9.2.12
- v9.2.11
- v9.2.10
- v9.2.9
- v9.2.8
- v9.2.7
- v9.2.6
- v9.2.5
- v9.2.4
- v9.2.3
- v9.2.2
- 9.2.1
- 9.2.0
- 9.1.9
- 9.1.8
- 9.1.7
- 9.1.6
- 9.1.5
- 9.1.4
- 9.1.3
- 9.1.1
- 9.1.0
- 9.0.50
- 9.0.49
- 9.0.48
- 9.0.47
- 9.0.46
- 9.0.45
- 9.0.44
- 9.0.43
- 9.0.42
- 9.0.41
- 9.0.40
- 9.0.39
- 9.0.38
- 9.0.37
- 9.0.36
- 9.0.35
- 9.0.34
- 9.0.33
- 9.0.32
- 9.0.31
- 9.0.30
- 9.0.29
- 9.0.28
- 9.0.27
- 9.0.26
- 9.0.25
- 9.0.24
- 9.0.23
- 9.0.22
- 9.0.21
- 9.0.20
- 9.0.19
- 9.0.18
- 9.0.17
- 9.0.16
- 9.0.15
- 9.0.14
- 9.0.13
- 9.0.12
- 9.0.11
- 9.0.10
- 9.0.9
- 9.0.8
- 9.0.7
- 9.0.6
- 9.0.5
- 9.0.4
- 9.0.3
- 9.0.2
- 9.0.1
- 9.0.0
- 9.0.0-rc1
- 9.0.0-BETA9
- 9.0.0-BETA8
- 9.0.0-BETA7
- 9.0.0-BETA6
- 9.0.0-BETA5
- 9.0.0-BETA4
- 9.0.0-BETA3
- 9.0.0-BETA2
- 9.0.0-BETA1
- 8.3.48
- 8.3.47
- 8.3.46
- 8.3.45
- 8.3.44
- 8.3.43
- 8.3.42
- 8.3.41
- 8.3.40
- 8.3.39
- 8.3.38
- 8.3.37
- 8.3.36
- 8.3.35
- 8.3.34
- 8.3.33
- 8.3.32
- 8.3.31
- 8.3.30
- 8.3.29
- 8.3.28
- 8.3.27
- 8.3.26
- 8.3.25
- 8.3.24
- 8.3.23
- 8.3.22
- 8.3.21
- 8.3.20
- 8.3.19
- 8.3.18
- 8.3.17
- 8.3.16
- 8.3.15
- 8.3.14
- 8.3.13
- 8.3.12
- 8.3.11
- 8.3.10
- 8.3.7
- 8.3.6
- 8.3.5
- 8.3.4
- 8.3.3
- 8.3.2
- 8.3.1
- 8.3.0
- 8.2.27
- 8.2.26
- 8.2.25
- 8.2.24
- 8.2.22
- 8.2.21
- 8.2.20
- 8.2.19
- 8.2.18
- 8.2.17
- v8.2.16
- v8.2.15
- v8.2.14
- v8.2.13
- v8.2.12
- v8.2.11
- v8.2.10
- v8.2.9
- v8.2.8
- v8.2.7
- v8.2.6
- v8.2.5
- v8.2.4
- v8.2.3
- v8.2.2
- v8.2.1
- v8.2.0
- v8.1.20
- v8.1.19
- v8.1.18
- v8.1.17
- v8.1.16
- v8.1.15
- v8.1.14
- v8.1.13
- v8.1.12
- v8.1.11
- v8.1.10
- v8.1.9
- v8.1.8
- v8.1.7
- v8.1.6
- v8.1.4
- v8.1.3
- v8.1.2
- v8.1.1
- v8.1.0
- v8.0.1
- v8.0.0
- v8.0.0-beta4
- v8.0.0-beta3
- v8.0.0-beta2
- v8.0.0-beta1
- v7.3.18
- v7.3.17
- v7.3.16
- v7.3.15
- v7.3.14
- v7.3.13
- v7.3.11
- v7.3.10
- v7.3.9
- v7.3.8
- v7.3.7
- v7.3.6
- v7.3.5
- v7.3.4
- v7.3.3
- v7.3.2
- v7.3.1
- v7.3.0
- v7.2.20
- v7.2.19
- v7.2.18
- v7.2.17
- v7.2.16
- v7.2.15
- v7.2.14
- v7.2.13
- v7.2.12
- v7.2.11
- v7.2.10
- v7.2.8
- v7.2.7
- v7.2.6
- v7.2.5
- v7.2.4
- v7.2.3
- v7.2.2
- v7.2.1
- v7.2.0
- v7.1.3
- v7.1.2
- v7.1.1
- v7.1.0
- v7.0.2
- v7.0.1
- v7.0.0
This package is auto-updated.
Last update: 2023-12-03 20:18:54 UTC
README
安装
composer require symplify/smart-file-system
使用
SplFileInfo
是否存在?
SplFileInfo::getRealPath()
方法返回文件的绝对路径... 或 FALSE
,如果文件不存在。默认的 PHP 行为强制您 检查所有 getRealPath()
调用
$fileInfo = new SplFileInfo('non_existing_file.txt'); if ($fileInfo->getRealPath() === false) { // damn, the files doesn't exist // throw exception or whatever // everytime! } $fileRealPath = $fileInfo->getRealPath();
虽然这有原因 - 例如,确保文件在构建后未被删除,但实际上我们必须调用该方法来确定文件已被删除。另一个烦恼是告诉静态分析器。
实际上,我们很少处理曾经存在但现在已删除的文件,除非我们有意为之。我们通常使用 SplFileInfo
来修改文件或处理它们的路径。
假设
- 我们可以解决这个问题,并确保
getRealPath()
方法始终返回字符串? - 在创建
SplFileInfo
时获取一个非现有文件的异常?
引入 SmartFileInfo
$fileInfo = new Symplify\SmartFileSystem\SmartFileInfo('non_existing_file.txt'); // throws Symplify\SmartFileSystem\Exception\FileNotFoundException
该类还带来了新的有用方法
// current directory (cwd()) is "/var/www" $smartFileInfo = new Symplify\SmartFileSystem\SmartFileInfo('/var/www/src/ExistingFile.php'); echo $smartFileInfo->getBasenameWithoutSuffix(); // "ExistingFile" echo $smartFileInfo->getRelativeFilePath(); // "src/ExistingFile.php" echo $smartFileInfo->getRelativeDirectoryPath(); // "src" echo $smartFileInfo->getRelativeFilePathFromDirectory('/var'); // "www/src/ExistingFile.php"
它还修复了 Symfony\Component\Finder\SplFileInfo
的 WTF 行为。哪一个?当你运行例如 vendor/bin/ecs check src
并使用 Finder
时,Symfony 现在返回到 src
的所有相对路径。这对于像:vendor/bin/ecs check src tests
这样的多个目录(都包含文件 Post.php
)是无用的。
$smartFileInfo = new Symplify\SmartFileSystem\SmartFileInfo('/var/www/src/Post.php'); echo $smartFileInfo->getRelativeFilePathFromCwd(); // "src/Post.php"
文件名匹配
最后但同样重要的是,在排除文件时,文件匹配非常有用(这对于像 ECS、PHPStan、Psalm、Rector、PHP CS Fixer 或 PHP_CodeSniffer 这样的工具来说是典型的)
$smartFileInfo = new Symplify\SmartFileSystem\SmartFileInfo('/var/www/src/PostRepository.php'); echo $smartFileInfo->endsWith('Repository.php'); // true echo $smartFileInfo->doesFnmatch('*Repo*'); // true
Smart FileSystem - 就像 Symfony,但更好
新方法 - readFile()
(用于读取文件)
$smartFileSystem = new Symplify\SmartFileSystem\SmartFileSystem(); $fileContent = $smartFileSystem->readFile(__DIR__ . '/SomeFile.php');
// if you plan to use SmartFileInfo, use this $smartFileInfo = $smartFileSystem->readFileToSmartFileInfo(__DIR__ . '/SomeFile.php');
将各种文件净化为 SmartFileInfo[]
您有多个可能会混淆的文件输入吗?
$files = [new SplFileInfo('someFile.php')]; $files = [new Symfony\Component\Finder\SplFileInfo('someFile.php', 'someFile', '')]; // or $files = (new Symfony\Component\Finder\Finder())->files(); // or $files = ['someFile.php'];
稍后,您实际上想处理这些文件
foreach ($files as $file) { // what methods do we have here // what kind of object? // is it even object or a string? $file->... }
使用净化后的文件,这些文件具有统一的格式,您可以依赖它们
use Symplify\SmartFileSystem\Finder\FinderSanitizer; $finderSanitizer = new FinderSanitizer(); $smartFileInfos = $finderSanitizer->sanitize($files); // always array of Symplify\SmartFileSystem\SmartFileInfo var_dump($smartFileInfos);
报告问题
如果您遇到错误或想请求新功能,请访问 Symplify monorepo 问题跟踪器
贡献
此包的源代码包含在 Symplify monorepo 中。我们欢迎在此 symplify/symplify 上为此包做出贡献。