web-dev-qa-db-ja.com

LaravelブレードPHPで配列を出力

.blade.phpに配列を表示したいのですが、正しく機能しないため、コントローラーは次のようになります。

class WatchController extends Controller
{

    public function index()
    {
        $watchFolderPath = 'C:\\xampp\\htdocs\\Pro\\rec\\';
        $watchFolder     = $this->dirToArray($watchFolderPath);
        return view('watch.new')->with('watchFolder', $watchFolder);
    }

    # Get Directories of Path as Array
    function dirToArray($dir) {

        $result = array();

        $cdir = scandir($dir);

        foreach ($cdir as $key => $value)
        {
            if (!in_array($value,array(".","..")))
            {
                if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
                {
                    $result[$value] = $this->dirToArray($dir . DIRECTORY_SEPARATOR . $value);
                }
                else
                {
                    $result[] = $value;
                }
            }
        }
        return $result;
    }
}

そして、私のブレードの中で、私はちょうどそれをこのように呼ぼうとしました:

{{ $watchFolder }}

しかし、それは機能しませんでした、私は次のエラーを受け取ります:

htmlentities()は、パラメーター1が文字列であり、配列が与えられることを想定しています

編集:私が取得した配列は、ディレクトリ内のサブフォルダを持つすべてのフォルダ/ファイルを示しています。 (dd()を使用)

現在、次のようになっています。

array:6 [▼
  123123 => array:2 [▼
    "subfolder1" => array:1 [▼
      0 => "video.mpg"
    ]
    "subfolder2" => array:1 [▶]
  ]
  789 => array:2 [▶]
  "folder1" => array:2 [▶]
  "folder2" => array:2 [▶]
  "folder3" => array:2 [▶]
  "folder1" => []
]
9

あなたの質問から、デバッグ目的でarrayを出力したいように見えますが、コメントしたように、単に<?phpおよび?>ブレードテンプレート内のタグ。

<?php dd($array); ?>

ただし、ブレードには{!!および!!}

ディレクトリ構造の出力を表示する準備ができたら、それをビューに割り当てる必要があります。

Reflectionで使用するには、2つの簡単な方法があります。コントローラー内:

class WatchController extends Controller
{
    public function index(\Illuminate\Filesystem\Filesystem $filesystem)
    {
        $files = $filesystem->allFiles($watchFolderPath);

        // Your code.

        return view('name', ['files' => $files]);
    }
}

または、 container から呼び出すには:

class WatchController extends Controller
{
    public function index()
    {
        $files = app('files')->allFiles($watchFolderPath);

        // Your code.

        return view('name', ['files' => $files]);
    }
}

また、shouldFilesystem を使用する必要があります。車輪を再発明する必要はありません–する必要があります マニュアルを読む

8
ash

デバッグ目的でブレードにアレイを出力するには:

        @php
            var_dump($arr);
        @endphp

次に、前述のforeachループを使用します。

5
Andrew

@foreach を使用する必要があります。

@foreach ($watchFolder as $key => $value)
    Key: {{ $key }}    
    Value: {{ $value }} 
@endforeach

または

@foreach ($watchFolder as $w)
    {{ $w->name }}    
@endforeach
4
Alexey Mezenin

私のように見えるかもしれないもののために...

echo implode("\n",$array);

それ以外の場合、その多次元配列

echo implode("\n",array_collapse($array));