web-dev-qa-db-ja.com

Yii2-フォルダー内のファイルを一覧表示する方法

こんにちは、Yii2 Basicアプリケーションを作成しています。管理領域にファイルアップロードフォームがあります。ファイルアップロードはファイルをapp/web/uploadsに送信します。私はsamdarkからファイルをアップロードするための素晴らしいチュートリアルに従いました。それはここで見ることができます: https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md

アップロードフォルダー内の各ファイルへのハイパーリンクをレンダリングするビューを作成する必要があります

Yii1.xxには、Cfileと呼ばれるファイルを処理するための拡張機能がありました。私はいくつかのアプリケーションで、今したいことをするために使用しました。

Cfileを使用して、次のようなコードを書くことができました。

$ cfileDir = Yii :: app()-> file-> set( 'pdfs /'); // PDFをターゲットフォルダとして設定

$ files = $ cfileDir-> getContents();

GetContents()メソッドは、後でforeachループを適用してフォルダー内のすべてのファイルを一覧表示できるので、すばらしいものでした。

Yii2では、uploadsフォルダーで同様のことを行う方法、つまり、そのフォルダー内のファイルのリストと、ビュー内にハイパーリンクを作成する方法。

ビュー内のハイパーリンクを作成するには、Html :: a()を使用できますが、その中にあるすべてのファイルを取得する方法はわかりません。

何か案は ??ありがとう。

[〜#〜]編集[〜#〜]

ALiのすばらしいヒントで解決しました。

ここにISコードの完全なブロック

<?php
    $files=\yii\helpers\FileHelper::findFiles('uploads/');
    if (isset($files[0])) {
        foreach ($files as $index => $file) {
            $nameFicheiro = substr($file, strrpos($file, '/') + 1);
            echo Html::a($nameFicheiro, Url::base().'/uploads/'.$nameFicheiro) . "<br/>" . "<br/>" ; // render do ficheiro no browser
        }
    } else {
        echo "There are no files available for download.";
    }
?>
17
André Castro

_Yii2_では、以下のようなFileHelperクラスを使用してこれを実現できます。

_$files=\yii\helpers\FileHelper::findFiles('/path/to');
_

これで、すべてのファイルが配列として_$files_変数にリストされました。

findFiles()メソッド。指定されたディレクトリとサブディレクトリの下にあるファイルを返します。

別の例:

_\yii\helpers\FileHelper::findFiles('.',['only'=>['*.php','*.txt']]);
_

上記の例では、phpおよびtxt拡張子を持つすべてのファイルがリストされています。

_\yii\helpers\FileHelper::findFiles('.',['except'=>['*.php','*.txt']]);    
_

上記の例は、phpおよびtxt拡張子を除く、すべての拡張子を持つすべてのファイルをリストしています。

_\yii\helpers\FileHelper::findFiles('.',['recursive'=>FALSE]);
_

上記の例では、サブディレクトリの下のファイルはリストされていません

31