パブリックフォルダー内のすべての画像のリストを自動的に生成したいのですが、これを行うのに役立つオブジェクトが見つからないようです。
Storage
クラスは仕事の良い候補のように思えますが、パブリックフォルダーの外部にあるストレージフォルダー内のファイルのみを検索できます。
Storageクラス用に別のディスクを作成できます。私の意見では、これはあなたにとって最良の解決策です。
config/filesystems.phpで、ディスクアレイに目的のフォルダーを追加します。この場合のpublicフォルダー。
'disks' => [
'local' => [
'driver' => 'local',
'root' => storage_path().'/app',
],
'public' => [
'driver' => 'local',
'root' => public_path(),
],
's3' => '....'
次に、Storage classを使用して、次の方法でパブリックフォルダー内で作業できます。
$exists = Storage::disk('public')->exists('file.jpg');
$ -exists変数はfile.jpgがpublicフォルダー内に存在するかどうかを示します。これはStorage disk 'public'がプロジェクトのパブリックフォルダーを指しているためです。
ドキュメントのすべてのSessionメソッドをカスタムディスクで使用できます。 disk( 'public')部分を追加するだけです。
Storage::disk('public')-> // any method you want from
Storage::disk('local')->files('optional_dir_name');
または
array_filter(Storage::disk('local')->files(), function ($item) {return strpos($item, 'png');});
laravel diskにはfiles()
とallfiles()
があります。allfiles
は再帰的です。
Globの使用を検討してください。ベアボーンを過度に複雑にする必要はありませんPHP Laravel 5。
<?php
foreach (glob("/location/for/public/images/*.png") as $filename) {
echo "$filename size " . filesize($filename) . "\n";
}
?>
公開ディレクトリ内のすべての画像を一覧表示するには、これを試してください:btw http://php.net/manual/en/class.splfileinfo.php を参照してください
function getImageRelativePathsWfilenames(){
$result = [];
$dirs = File::directories(public_path());
foreach($dirs as $dir){
var_dump($dir); //actually string: /home/mylinuxiser/myproject/public"
$files = File::files($dir);
foreach($files as $f){
var_dump($f); //actually object SplFileInfo
//object(Symfony\Component\Finder\SplFileInfo)#628 (4) {
//["relativePath":"Symfony\Component\Finder\SplFileInfo":private]=>
//string(0) ""
//["relativePathname":"Symfony\Component\Finder\SplFileInfo":private]=>
//string(14) "text1_logo.png"
//["pathName":"SplFileInfo":private]=>
//string(82) "/home/mylinuxiser/myproject/public/img/text1_logo.png"
//["fileName":"SplFileInfo":private]=>
//string(14) "text1_logo.png"
//}
if(ends_with($f, ['.png', '.jpg', '.jpeg', '.gif'])){
$result[] = $f->getRelativePathname(); //prefix your public folder here if you want
}
}
}
return $result; //will be in this case ['img/text1_logo.png']
}
ディレクトリ内のすべてのファイルをリストするには、これを使用します
$dir_path = public_path() . '/dirname';
$dir = new DirectoryIterator($dir_path);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
}
else {
}
}
次のコードを使用して、パブリックフォルダー内の特定のフォルダーのすべてのサブディレクトリを取得してください。フォルダーをクリックすると、各フォルダー内のファイルが一覧表示されます。
コントローラーファイル
public function index() {
try {
$dirNames = array();
$this->folderPath = 'export'.DS.str_replace( '.', '_', $this->getCurrentShop->getCurrentShop()->shopify_domain ).DS.'exported_files';
$getAllDirs = File::directories( public_path( $this->folderPath ) );
foreach( $getAllDirs as $dir ) {
$dirNames[] = basename($dir);
}
return view('backups/listfolders', compact('dirNames'));
} catch ( Exception $ex ) {
Log::error( $ex->getMessage() );
}
}
public function getFiles( $directoryName ) {
try {
$filesArr = array();
$this->folderPath = 'export'.DS.str_replace( '.', '_', $this->getCurrentShop->getCurrentShop()->shopify_domain ).DS.'exported_files'. DS . $directoryName;
$folderPth = public_path( $this->folderPath );
$files = File::allFiles( $folderPth );
$replaceDocPath = str_replace( public_path(),'',$this->folderPath );
foreach( $files as $file ) {
$filesArr[] = array( 'fileName' => $file->getRelativePathname(), 'fileUrl' => url($replaceDocPath.DS.$file->getRelativePathname()) );
}
return view('backups/listfiles', compact('filesArr'));
} catch (Exception $ex) {
Log::error( $ex->getMessage() );
}
}
ルート(Web.php)
Route::resource('displaybackups', 'Displaybackups\BackupController')->only([ 'index', 'show']);
Route :: get( 'get-files/{directoryName}'、 'Displaybackups\BackupController @ getFiles');
ファイルの表示-リストフォルダー
@foreach( $dirNames as $dirName)
<div class="col-lg-3 col-md-3 col-sm-4 align-center">
<a href="get-files/{{$dirName}}" class="btn btn-light folder-wrap" role="button">
<span class="glyphicon glyphicon-folder-open folderIcons"></span>
{{ $dirName }}
</a>
</div>
@endforeach
表示-リストファイル
@foreach( $filesArr as $fileArr)
<div class="col-lg-2 col-md-3 col-sm-4">
<a href="{{ $fileArr['fileUrl'] }}" class="waves-effect waves-light btn green folder-wrap">
<span class="glyphicon glyphicon-file folderIcons"></span>
<span class="file-name">{{ $fileArr['fileName'] }}</span>
</a>
</div>
@endforeach