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