Finder 4.0: 10 let zkušeností pod kapotou
Nette Finder umožňuje hledat soubory a složky na základě kritérií. Nová verze 4.0 byla kompletně přepsána s využitím 10 let zkušeností s používáním předchozích verzí. Díky tomu vznikl nástroj, který se vám bude ještě lépe a efektivněji používat.
Masky, všude, najednou
Nová verze Nette Finder 4.0 podporuje znak **
zvaný globstar,
který je mocným trumfem, protože umožňuje hledat i v podadresářích.
Například pomocí masky src/**/tests/*.php
hledáte všechny PHP
soubory v adresáři tests
nacházejícím se v src
nebo jakémkoliv jeho podadresáři:
Finder::findFiles('src/**/tests/*.php');
Masky lze používat i v metodách in()
, from()
nebo exclude()
:
Finder::findFiles('*.php')->in('/foo/**/vendor'); // najde /foo/sub1/sub2/vendor/file.php
Finder::findFiles('*.php')->from('/foo/**/vendor'); // najde i /foo/sub1/sub2/vendor/sub3/file.php
FileInfo
Vrácené soubory jsou objekty Nette\Utils\FileInfo
, což je
potomek původního SplFileInfo
, který navíc přidává metody
getRelativePath()
a getRelativePathname()
užitečné
při procházení do hloubky přes from()
. A dále metody
read()
a write()
pro přečtení/zápis obsahu
souboru:
foreach (Finder::findFiles('*.md') as $file) {
$contents = $file->read();
$contents = str_replace('http://', 'https://', $contents);
$file->write($contents);
}
Rozšířené API
Pomocí metod files()
a directories()
můžete
doplňovat, co dalšího se má vyhledat. Metody lze volat opakovaně a jako
parametr lze uvést i pole masek:
Finder::findDirectories('tests') // všechny adresáře tests/
->files(['*.php', '*.phtml']); // plus všechny PHP soubory
Alternativou statických metod je vytvoření instance pomocí
new Finder
(takto vytvořený objekt nevyhledává nic) a uvedení,
co hledat, pomocí files()
a directories()
:
(new Finder)
->directories() // všechny adresáře
->files('*.php'); // plus všechny PHP soubory
Pokud potřebujete hledat různé typy souborů, které jsou v odlišných
umístěních nebo splňují rozdílná kritéria, použijte metodu
append()
. Vrací nový objekt Finder, takže je možné řetězit
volání metod:
($finder = new Finder) // do proměnné $finder si uložíme první Finder
->files('*.php') // v src/ hledáme soubory *.php
->from('src')
->append()
->files('*.md') // v docs/ hledáme soubory *.md větší než 1000 bajtů
->from('docs')
->size('>', 1000)
->append()
->files('*.json'); // v aktuální složce hledáme soubory *.json
Alternativně lze použít metodu append()
pro přidání
konkrétního souboru nebo pole souborů:
$finder = Finder::findFiles('*.txt')
->append(__FILE__);
Řazení výsledků
Finder 4.0 nabízí možnost řazení výsledků. Metoda
sortByName()
řadí výsledky podle názvů souborů. Řazení je
naturální, tedy správně si poradí s čísly v názvech a vrací např.
foo1.txt
před foo10.txt
. Finder umožňuje také
řadit pomocí vlastní funkce. Například takto seřadíme soubory podle
velikosti:
$finder->sortBy(fn($a, $b) => $a->getSize() <=> $b->getSize());
A mnoho dalšího
Kompletní přehled funkcí najdete v dokumentaci Finderu.
Finder je nově součástí balíčku Nette
Utils 4.0. Tedy balíček nette/utils
verze 4 nahrazuje
původní nette/finder
. Poznámky pro upgrade jsou v migrační
příručce.
Chcete-li odeslat komentář, přihlaste se