web-dev-qa-db-fra.com

Laravel print array in blade php

Je veux afficher un tableau dans mon .blade.php, mais cela ne fonctionne pas correctement, mon contrôleur ressemble à ceci:

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;
    }
}

Et à l'intérieur de ma lame, j'ai juste essayé de l'appeler comme ceci:

{{ $watchFolder }}

mais cela n'a pas fonctionné, j'obtiens l'erreur suivante:

htmlentities () s'attend à ce que le paramètre 1 soit une chaîne, un tableau étant donné

Edit: Le tableau que j'obtiens montre tous les dossiers/fichiers avec sous-dossier dans un répertoire. (utilisé dd ())

Actuellement, cela ressemble à ceci:

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
John Does Legacy

D'après votre question, il semble que vous souhaitiez sortir le array à des fins de débogage qui, comme je l'ai commenté, vous pouvez simplement utiliser <?php et ?> balises dans vos modèles de lame.

<?php dd($array); ?>

Cependant, blade a une paire de balises de sortie brute qui est {!! et !!}.

Une fois que vous êtes prêt à afficher la sortie de votre structure de répertoires, vous devez l'affecter à votre vue.

Il y a 2 façons rapides de l'utiliser soit avec Reflection; à l'intérieur de votre contrôleur:

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

        // Your code.

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

Ou pour l'appeler depuis le conteneur :

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

        // Your code.

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

De plus, vous devez utiliser Filesystem , il n'est pas nécessaire de réinventer la roue - Vous devez lire le manuel .

8
ash

Pour simplement sortir le tableau dans la lame à des fins de débogage:

        @php
            var_dump($arr);
        @endphp

Ensuite, utilisez une boucle foreach comme mentionné.

5
Andrew

Tu devrais utiliser @foreach :

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

Ou

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

Pour ceux qui pourraient venir me ressembler ...

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

sinon si son tableau multidimensionnel

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