LoginSignup
6
9

More than 3 years have passed since last update.

Laravelでとあるディレクトリのファイル一覧を取得したい人へ

Last updated at Posted at 2020-11-23

世にはいろいろなQiita記事があり,Laravelの記事も様々...かと思いきや,Laravelの記事って結構少なくないですか?

タイトルの通り,この記事はLaravelでほかのファイルの名前を取得したい人への僕のささやかな気持ちです.
一方的に投げつけておくのでどうぞ受け取ってください.

やり方

  1. 〇〇_path('パス\*')で,ファイル一覧を取得したいディレクトリのフルパスを取得.
  2. glob(取得したフルパス)で,ディレクトリ内のファイルのパスを配列として取得.

ステップ1. 〇〇_path('パス\*')で,ファイル一覧を取得したいディレクトリのフルパスを取得.

〇〇_path()というヘルパ関数を使います.
この関数は,相対パスを指定したフォルダやファイルのフルパスを取得することができる関数です.
これには以下の種類があり,それぞれの〇〇の部分が,パスを取得できる場所(resourcesやpublicなど)に対応しています.

  • app_path()
  • base_path()
  • config_path()
  • database_path()
  • mix_path()
  • public_path()
  • resource_path()
  • storage_path()

参照:Helpers - Laravel - The PHP Framework For Web Artisans

使用例は次の通りです.

hogehogeController.php
// resourceディレクトリ内のviews/folder1のフルパスを取得
$path = resource_path('views/folder1'); //出力例(ローカルの場合)->C:\Users\(途中のディレクトリ)\resources\views\file1

// publicディレクトリ内のcss/app.cssのフルパスを取得
$path = public_path('css/app.css'); //出力例(サーバーの場合)->/home/users/(途中のディレクトリ)/public/css/app.css

注意:パスの指定にバックスラッシュ\を使うと,Windowsではうまくいきましたがサーバー(Linux)ではパスを取得できませんでした.なので,スラッシュ/で指定しましょう!

ステップ2.glob(取得したフルパス)で,ディレクトリ内のファイルのパスを配列として取得.

〇〇_path()で相対パスをフルパスにしたら,次はglob()の出番です.
glob()は,一定のパターン(詳しくは後述)にマッチするパスを探すことができる関数です.

参照:PHPのglobメソッドの使い方を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

使用例は次の通り

hogehogeController.php
// resources/views/folder1内のすべてのファイル(file1.txt, file2.blade.php)を取得
$path = resource_path('views/folder1/*.*');
$files = glob($path);

//出力例
// -> /home/users/(途中のディレクトリ)/resources/views/folder1/file1.txt
// -> /home/users/(途中のディレクトリ)/resources/views/folder1/file2.blade.php

上記の例では,すべてのファイルを取得するように,resource_path()に指定するパスの最後にパターンの指定/*.*をつけています.
これを例えば/*にすればすべてのファイルとディレクトリ,/*.blade.phpにすれば全てのブレードファイルを取得できます.

これでとあるディレクトリのファイル一覧を配列として取得できました!
あとは適宜,正規表現で使いたいところを切り出しましょう...!

6
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9