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


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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

  Travaillez avec moi !