Lister les fichiers d'un répertoire et de ses sous-répertoires avec le composant Symfony Finder
Publié le 13/02/2024 • Actualisé le 13/02/2024
Dans le  snippet précédent, nous avons vu comment lister les fichiers d'un répertoire et de ses sous-répertoires avec la classe SPL RecursiveDirectoryIterator. Maintenant, voyons comment faire la même chose, mais avec le composant Finder de Symfony. Sans surprise, le code utilisant le composant Symfony est bien plus concis et lisible.
<?php
declare(strict_types=1);
// src/Controller/Snippet/Snippet291Trait.php
namespace App\Controller\Snippet;
use Symfony\Component\Finder\Finder;
/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet291Trait
{
    public function snippet291(): void
    {
        $baseDir = \dirname(__DIR__);
        $finder = (new Finder())
            ->files()
            ->name('*.php')
            ->in($baseDir)
            ->sortByName()
        ;
        $count = 0;
        foreach ($finder as $file) {
            $pathName = $file->getPathname();
            $pathName = str_replace($baseDir.'/', '', $pathName); // remove base path
            ++$count;
            echo $pathName.PHP_EOL;
        }
        echo PHP_EOL;
        echo 'Number of files: '.$count;
        // That's it! 😁
    }
}Exécuter le snippet Plus sur Stackoverflow Lire la doc Snippet aléatoire
A vous de jouer !
Ces articles vous ont été utiles ? Vous pouvez m'aider à votre tour de plusieurs manières : (cliquez sur le lien "reply" dans à droite pour me contacter )
- Me remonter des erreurs ou typos.
- Me remonter des choses qui pourraient être améliorées.
- Aimez et repostez !
- Suivez moi sur Bluesky 🦋
- Inscrivez-vous au flux RSS.
- Cliquez sur les boutons Plus sur Stackoverflow pour me faire gagner des badges "annonceur" 🏅.
                    Merci et à très bientôt sur Strangebuzz ! 😉
                    
