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" => []
]
Para generar la matriz en Blade con fines de depuración:
@php
var_dump($arr);
@endphp
Luego use un bucle foreach como se mencionó.
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 dee()
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
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