Skip to content

Commit 70b2c87

Browse files
authored
[12.x] add allDirectories() method to Filesytem (#57565)
* add `allDirectories()` method to `Filesytem` we already have `files()`, `allFiles()`, and `directories()`, so this method completes the set and allows us to recursively get all directories within a given path. * minor formatting * return string path names instead of `SplFileInfo`s
1 parent 2a10877 commit 70b2c87

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

src/Illuminate/Filesystem/Filesystem.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,22 @@ public function directories($directory)
622622
return $directories;
623623
}
624624

625+
/**
626+
* Get all the directories within a given directory (recursive).
627+
*
628+
* @return array
629+
*/
630+
public function allDirectories(string $directory): array
631+
{
632+
$directories = [];
633+
634+
foreach (Finder::create()->in($directory)->directories()->sortByName() as $dir) {
635+
$directories[] = $dir->getPathname();
636+
}
637+
638+
return $directories;
639+
}
640+
625641
/**
626642
* Ensure a directory exists.
627643
*

src/Illuminate/Support/Facades/File.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
* @method static \Symfony\Component\Finder\SplFileInfo[] files(string $directory, bool $hidden = false)
4343
* @method static \Symfony\Component\Finder\SplFileInfo[] allFiles(string $directory, bool $hidden = false)
4444
* @method static array directories(string $directory)
45+
* @method static array allDirectories(string $directory)
4546
* @method static void ensureDirectoryExists(string $path, int $mode = 0755, bool $recursive = true)
4647
* @method static bool makeDirectory(string $path, int $mode = 0755, bool $recursive = false, bool $force = false)
4748
* @method static bool moveDirectory(string $from, string $to, bool $overwrite = false)

tests/Filesystem/FilesystemTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,21 @@ public function testDirectoriesFindsDirectories()
525525
$this->assertContains(self::$tempDir.DIRECTORY_SEPARATOR.'music', $directories);
526526
}
527527

528+
public function testAllDirectoriesFindsDirectories()
529+
{
530+
mkdir(self::$tempDir.'/film');
531+
mkdir(self::$tempDir.'/music');
532+
mkdir(self::$tempDir.'/music/rock');
533+
mkdir(self::$tempDir.'/music/blues');
534+
535+
$directories = (new Filesystem)->allDirectories(self::$tempDir);
536+
537+
$this->assertContains(self::$tempDir.DIRECTORY_SEPARATOR.'film', $directories);
538+
$this->assertContains(self::$tempDir.DIRECTORY_SEPARATOR.'music', $directories);
539+
$this->assertContains(self::$tempDir.DIRECTORY_SEPARATOR.'music'.DIRECTORY_SEPARATOR.'rock', $directories);
540+
$this->assertContains(self::$tempDir.DIRECTORY_SEPARATOR.'music'.DIRECTORY_SEPARATOR.'blues', $directories);
541+
}
542+
528543
public function testMakeDirectory()
529544
{
530545
$files = new Filesystem;

0 commit comments

Comments
 (0)