2016-12-15 5 views
3

私はサブディレクトリを含むディレクトリを持っています、各サブディレクトリに画像があります。画像をランダムに表示したい。 下のコードはうまく動作しますが、Laravelでは動作しません。問題はopendir()readdir()です。 LaravelでLaravel:ディレクトリからランダムな画像を取得する方法は?

ビューブレード

<?php 
$folder = opendir('images/'); 

$i = 0; 
while(false !=($file = readdir($folder))){ 
if($file != "." && $file != ".."){ 
    $images[$i]= $file; 
    $i++; 
    } 
} 
$random_img=rand(0,count($images)-1); 
?> 

<div> 
<?php 
echo '<img src="images/'.$images[$random_img].'" alt="" />'; 
?> 
</div> 
+0

http://stackoverflow.com/questions/7121479/listing-all-the-folders-subfolders-and-files-in-a-directory-using-phpをチェックすると、ディレクトリ内にファイルのリストが表示され、サブディレクトリを作成し、ランダムな順序を入れてもよい。 – Dev

答えて

3

あなたはファイルシステムで動作するようにStorageを使用する必要があります。

$files = Storage::allFiles($directory); 
$randomFile = $files[rand(0, count($files))]; 
+0

私はエラーがあります:syntax error、unexpected '、'、expecting ']' – nabil

+0

'rand()'を挿入するのを忘れました。 –

+0

エラーメッセージは表示されませんが、ページに何も表示されません。ページが完全に充電されていません。 – nabil

1

あなたはすべてのファイルを取得し、ランダムロジックを使用して、イメージの1つを取得するにはLaravelのallFiles方法を使用することができます。

File::allFiles($directory) 
1

実は、あなたが設定した構成をした、Laravel Filesystemを使用することができますが、それは完全に動作させるために。たとえば、次のコードは動作しません。

$dir = 'images'; // public/images 
$files = \Storage::allFiles($dir); 

を、Filesystemあなたはこのようなものがありconfig/filesystems.phpから設定を使用しているので:Laravellocalディスクを使用し、それが指すデフォルトで

'disks' => [ 
    'local' => [ 
     'driver' => 'local', 
     'root' => storage_path('app'), 
    ], 
    // ... 
] 

を、別のパスに移動します。だから、それが動作するために、あなたはセットアップにconfigにディスクをしました、例えば、配列に次のエントリを追加します。

'web' => [ 
    'driver' => 'local', 
    'root' => base_path('public'), 
], 

その後、あなたはこのようなものを使用可能性があります

$dir = 'images'; // public/images 
if($files = \Storage::disk('web')->allFiles('images')) { 
    $path = $files[array_rand($files)]; 
} 

view$pathを使用するには<img src="{{asset($path)}}">を使用してください。 Check more here

+1

ありがとうございます、あなたの応答は有益です。 – nabil

+0

あなたは歓迎です:-) –

関連する問題