KeepItSimple\FileSystem\Finder

KeepItSimple\FileSystem\Finder

A much simpler implementation of the Finder Component from Symfony

This Finder class finds files and directories via a set of rules, the same way as the Finder Component from Symfony but in a much simpler implementation.

The main purpose was to create an alternative to the Symfony Finder because I find it too "heavy" for what it is suppose to do. Many files, folder, iterators, comparators, classes and exceptions (~20). That's too much for a finder...

Let's keep it simple !

As my Finder is a simpler version of the Symfony one, you won't find some features :

  • Custom exceptions (only Exception classes from SPL)
  • Some methods like path(), notPath(), ...
  • Custom SplFileInfo, therefore these methods are not available :
    • getRelativePath()
    • getRelativePathname()
    • getContents()

(It is still easy to implement them by your own...)

Installation

Via composer :

$ composer require debuss-a/finder "dev-master"

Usage

List files and folders in a directory

use KeepItSimple\FileSystem\Finder;

foreach (Finder::create()->in(__DIR__) as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

List only files or only folders in a directory

use KeepItSimple\FileSystem\Finder;

foreach (Finder::create()->files()->in(__DIR__) as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

foreach (Finder::create()->directories()->in(__DIR__) as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

Select a directory

The only compulsory parameter is a path.
You may use the in() method with glob() like path.
The in() method can be chained to include many paths or an array of path can be provided.

use KeepItSimple\FileSystem\Finder;

foreach (Finder::create()->in(__DIR__.'/*/*/test') as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

foreach (Finder::create()->in(__DIR__)->in('/home/alex/docs') as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

foreach (Finder::create()->in([__DIR__, '/home/alex/docs']) as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

Sorting

Some sorting method are already provided but you can also supply your own.

use KeepItSimple\FileSystem\Finder;

foreach (Finder::create()->in(__DIR__)->sortByName() as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

$finder = Finder::create()->in(__DIR__)->sort(function (SplFileInfo $a, SplFileInfo $b) {
    // Equivalent to the method sortByName()
    return strcmp($a->getFilename(), $b->getFilename())
});

foreach ($finder as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

Filtering

Some filtering method are already provided but you can also supply your own.

use KeepItSimple\FileSystem\Finder;

// The name() method accepts globs, strings, or regexes
foreach (Finder::create()->in(__DIR__)->name('*.php') as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

$finder = Finder::create()->in(__DIR__)->filter(function (SplFileInfo $current) {
    return $current->getBasename() !== 'index.php';
});

foreach ($finder as $file) {
    // Magic here
    // $file is an instance of SplFileInfo
}

Complete documentation

The complete documentation is provided in the documentation folder.
Generated with APIGen.



Blog Comments powered by Disqus.