ファイルコレクション
ファイルのグループを扱うことは面倒な作業になる可能性があるため、フレームワークはFileCollection
クラスを提供して、ファイルシステム全体でファイルのグループの検索と操作を容易にします。
基本的な使用方法
最も基本的なレベルでは、FileCollection
は、設定または構築するファイルのインデックスです。
<?php
use CodeIgniter\Files\FileCollection;
$files = new FileCollection([
FCPATH . 'index.php',
ROOTPATH . 'spark',
]);
$files->addDirectory(APPPATH . 'Filters');
操作するファイルを入力したら、ファイルを削除したり、フィルタリングコマンドを使用して、特定の正規表現またはglobスタイルのパターンに一致するファイルを削除または保持したりできます。
<?php
$files->removeFile(APPPATH . 'Filters/DevelopToolbar');
$files->removePattern('#\.gitkeep#');
$files->retainPattern('*.php');
コレクションが完了したら、get()
を使用して最終的なファイルパスのリストを取得するか、FileCollection
がカウント可能で反復可能であることを利用して、各File
を直接操作できます。
<?php
echo 'My files: ' . implode(PHP_EOL, $files->get());
echo 'I have ' . count($files) . ' files!';
foreach ($files as $file) {
echo 'Moving ' . $file->getBasename() . ', ' . $file->getSizeByUnit('mb');
$file->move(WRITABLE . $file->getRandomName());
}
FileCollection
を操作するための具体的なメソッドを以下に示します。
コレクションの開始
__construct(string[] $files = [])
コンストラクタは、初期コレクションとして使用するファイルパスの配列をオプションで受け付けます。これらはadd()
に渡されるため、$files
内の子クラスによって提供されたファイルは残ります。
define()
子クラスが独自の初期ファイル定義を可能にします。このメソッドはコンストラクタによって呼び出され、メソッドを使用しなくても事前に定義されたコレクションを使用できます。例
<?php
use CodeIgniter\Files\FileCollection;
class ConfigCollection extends FileCollection
{
protected function define(): void
{
$this->add(APPPATH . 'Config', true)->retainPattern('*.php');
}
}
これで、プロジェクト内の任意の場所でConfigCollection
を使用して、コレクションメソッドを毎回呼び出す必要なく、すべてのアプリケーション設定ファイルにアクセスできます。
set(array $files)
入力ファイルのリストを提供されたファイルパスの文字列配列に設定します。これにより、コレクションから既存のファイルが削除されるため、$collection->set([])
は基本的にハードリセットです。
ファイルの入力
add(string[]|string $paths, bool $recursive = true)
パスまたはパスの配列によって示されたすべてのファイルを追加します。パスがディレクトリを解決する場合は、$recursive
によりサブディレクトリが含まれます。
addFile(string $file) / addFiles(array $files)
ファイルまたはファイルを現在の入力ファイルのリストに追加します。ファイルは実際のファイルへの絶対パスです。
removeFile(string $file) / removeFiles(array $files)
ファイルまたはファイルを現在の入力ファイルのリストから削除します。
addDirectory(string $directory, bool $recursive = false)
addDirectories(array $directories, bool $recursive = false)
ディレクトリまたはディレクトリからのすべてのファイルを追加し、オプションでサブディレクトリに再帰的にアクセスします。ディレクトリは実際のディレクトリへの絶対パスです。
ファイルのフィルタリング
removePattern(string $pattern, string $scope = null)
retainPattern(string $pattern, string $scope = null)
現在のファイルリストをパターン(およびオプションのスコープ)でフィルタリングし、一致するファイルを削除または保持します。$pattern
は完全な正規表現('#[A-Za-z]+\.php#'
など)またはglob()
に似た擬似正規表現(*.css
など)です。$scope
が提供されている場合、そのディレクトリ内または下にあるファイルのみが考慮されます(つまり、$scope
の外側のファイルは常に保持されます)。スコープが提供されない場合、すべてのファイルが対象となります。
例
<?php
use CodeIgniter\Files\FileCollection;
$files = new FileCollection();
$files->add(APPPATH . 'Config', true); // Adds all Config files and directories
$files->removePattern('*tion.php'); // Would remove Encryption.php, Validation.php, and boot/production.php
$files->removePattern('*tion.php', APPPATH . 'Config/boot'); // Would only remove boot/production.php
$files->retainPattern('#A.+php$#'); // Would keep only Autoload.php
$files->retainPattern('#d.+php$#', APPPATH . 'Config/boot'); // Would keep everything but boot/production.php and boot/testing.php
ファイルの取得
get(): string[]
読み込まれたすべての入力ファイルの配列を返します。
注記
FileCollection
はIteratorAggregate
なので、直接操作できます(例:foreach $collection as $file
)。