Matriz de impresión de Laravel en Blade php

5 minutos de lectura

Avatar de usuario de John Does Legacy
John hace legado

Quiero mostrar una matriz en mi .blade.php, pero no funciona correctamente, por lo que mi controlador se ve así:

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

Y dentro de mi espada solo traté de llamarlo así:

{{ $watchFolder }}

pero no funcionó, me sale el siguiente error:

htmlentities() espera que el parámetro 1 sea una cadena, matriz dada

Editar: la matriz que obtengo muestra todas las carpetas/archivos con subcarpetas en un directorio. (usado dd())

Actualmente se ve así:

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" => []
]

  • necesita recorrer los elementos, como @foreach solo lee el manual de la hoja

    –Kevin

    16 de marzo de 2016 a las 7:44

  • Cualquiera {{ print_r($array, true) }} o {!! dd($array) !!} Te ayudará 🙂

    – Ceniza

    16 de marzo de 2016 a las 8:57


  • Quiero mostrarlo bellamente en mi hoja más adelante…

    – John hace legado

    16 de marzo de 2016 a las 9:00

  • He respondido, con mi respuesta y la respuesta de Alexey, tiene todo lo que necesita; si aún no puede resolverlo, entonces es difícil; te hemos alimentado con cuchara lo suficiente.

    – Ceniza

    16 de marzo de 2016 a las 9:11

  • ¿Qué comentario? hay muchos de los cuales ninguno hace una pregunta específica: ¿por qué no mejorar su pregunta para ser 100% claro en cuanto a lo que quiere lograr, lo que ha hecho hasta ahora y lo que no puede hacer?

    – Ceniza

    16 de marzo de 2016 a las 9:14

Para generar la matriz en Blade con fines de depuración:

        @php
            var_dump($arr);
        @endphp

Luego use un bucle foreach como se mencionó.

Avatar de usuario de Ash
Ceniza

De su pregunta, parece que desea generar el formación para fines de depuración que, como he comentado, simplemente puede usar <?php y ?> etiquetas dentro de las plantillas de su hoja.

<?php dd($array); ?>

Sin embargo, Blade tiene un par de etiquetas de salida sin procesar que es {!! y !!}.

Una vez que esté listo para mostrar la salida de su estructura de directorios, debe asignarla a su vista.

Hay 2 formas rápidas de usarlo con Reflection; dentro de su controlador:

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

        // Your code.

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

O para llamarlo desde el envase:

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

        // Your code.

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

También tú debería estar usando el sistema de archivosno hay necesidad de reinventar la rueda – Deberías lee el manual.

Deberías usar @foreach:

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

O

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

  • ¿Cómo imprimiría todos los valores de la matriz?

    – John hace legado

    16 de marzo de 2016 a las 7:53

  • Si está preguntando cómo imprimir todos los valores para la depuración, puede intentar usar dd($watchFolder); en su controlador o {{ dd($watchFolder); }} en tu vista Si está preguntando cómo imprimir valores de matriz en producción, mire el código en mi respuesta.

    – Alexei Mezenin

    16 de marzo de 2016 a las 8:05


  • no funciona Recibo el siguiente error: ErrorException en helpers.php línea 469: htmlentities() espera que el parámetro 1 sea una cadena, una matriz dada

    – John hace legado

    16 de marzo de 2016 a las 8:38

  • Eso se debe a que está creando una matriz complicada, publique su ejemplo de estructura de matriz en su pregunta, para que podamos ayudarlo.

    – Alexei Mezenin

    16 de marzo de 2016 a las 8:48

  • en hoja {{ y }} son reemplazos para <?php echo y ?> y también se analizan a través de e() para escapar de las cosas malas. Por lo tanto, necesitaría la literal etiquetas para salida HTML o php RAW; {!! y !!} o <?php y ?> también son de uso gratuito dentro de una plantilla de hoja (aunque mal visto).

    – Ceniza

    16 de marzo de 2016 a las 9:01

Para aquellos que podrían venir luciendo… como yo

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

de lo contrario, si su matriz multidimensional

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

Simplemente puede usar:

@dump($arr)

  • Si bien este código puede resolver la pregunta, incluyendo una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación y probablemente resulte en más votos a favor. Recuerda que estás respondiendo la pregunta para lectores en el futuro, no solo para la persona que pregunta ahora. Edite su respuesta para agregar explicaciones y dar una indicación de las limitaciones y suposiciones que se aplican.

    – Yunnosch

    23 de enero de 2022 a las 16:14

Para dar salida a su $watchFolder matriz en un archivo blade, puede usar el siguiente método:

<pre><code>{{ json_encode($watchFolder, JSON_PRETTY_PRINT) }}</code></pre>

Esto mostrará una versión JSON bien formateada de su matriz y la hará más legible:

{
    "123123": {
        "subfolder1": [
            "video.mpg"
        ],
        "subfolder2": []
    },
    "789": [],
    "folder1": [],
    "folder2": [],
    "folder3": []
}

También puede quitar el JSON_PRETTY_PRINT si solo necesita mostrarlo en una sola línea:

{"123123":{"subfolder1":["video.mpg"],"subfolder2":[]},"789":[],"folder1":[],"folder2":[],"folder3":[]}

  • Si bien este código puede resolver la pregunta, incluyendo una explicación de cómo y por qué esto resuelve el problema realmente ayudaría a mejorar la calidad de su publicación y probablemente resulte en más votos a favor. Recuerda que estás respondiendo la pregunta para lectores en el futuro, no solo para la persona que pregunta ahora. Edite su respuesta para agregar explicaciones y dar una indicación de las limitaciones y suposiciones que se aplican.

    – Yunnosch

    23 de enero de 2022 a las 16:14

¿Ha sido útil esta solución?