Posterior a de una prolongada búsqueda de información pudimos resolver este inconveniente que pueden tener muchos de nuestros usuarios. Te regalamos la respuesta y nuestro deseo es serte de mucha ayuda.
Solución:
Creo que la respuesta a su pregunta es que, esencialmente, ForElse es un bucle ForEach, pero con manejo adicional para entradas vacías.
De los documentos de Laravel 5 en Blade Templates, un ejemplo que ilustra ambos bucles con la misma lista de Usuarios como Entrada:
@foreach ($users as $user)
This is user $user->id
@endforeach
@forelse ($users as $user)
$user->name
@empty
No users
@endforelse
Ahora, si comparamos esto con el código fuente de Laravel Framework para ver cómo se compilan los bucles (todas las construcciones de Blade se compilan en HTML cuando PHP las representa en la página web):
/**
* Compile the for-each statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileForeach($expression)
preg_match('/( *(.*) +as *(.*))$/is', $expression, $matches);
$iteratee = trim($matches[1]);
$iteration = trim($matches[2]);
$initLoop = "$__currentLoopData = $iteratee; $__env->addLoop($__currentLoopData);";
$iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
return "";
/**
* Compile the for-else statements into valid PHP.
*
* @param string $expression
* @return string
*/
protected function compileForelse($expression)
$empty = '$__empty_'.++$this->forElseCounter;
preg_match('/( *(.*) +as *(.*))$/is', $expression, $matches);
$iteratee = trim($matches[1]);
$iteration = trim($matches[2]);
$initLoop = "$__currentLoopData = $iteratee; $__env->addLoop($__currentLoopData);";
$iterateLoop = '$__env->incrementLoopIndices(); $loop = $__env->getLastLoop();';
return "";
Esencialmente, el bucle ForElse tiene un código integrado y una verificación de compilación para una entrada vacía, en cuyo caso genera opcionalmente una plantilla de visualización alternativa para la entrada vacía.
Me imagino que puede usar un bucle ForEach en todos los casos en que podría usar un bucle ForElse, agregando que incluye y vacía los cheques que ForElse podría atrapar por usted.
Enlaces de referencia:
- Plantillas de hoja
- Funciones de compilación de Blade View
los foreach
bucle como usted describió bucles sobre cada elemento en un array
los foresee
bucle en esencia es exactamente lo mismo con un elemento adicional como ya notó, el else
declaración. El uso principal de esto para usar cuando tiene un vacío array
.
Por lo tanto, recorre todos los elementos y, por ejemplo, muestra una fila de una tabla pero coloca un aviso vacío cuando no tiene ningún dato.
Ver la diferencia básica es en caso de que no se encuentren datos
foreach
bucle que tienes que comprobar count
condición y luego imprimir según la salida. Esto aumentará un poco el esfuerzo, pero en forelse
se verifica automáticamente y se usa @empty
tienes que echo
datos no encontrados..
Si sostienes algún incógnita y capacidad de ascender nuestro tutorial eres capaz de ejecutar una aclaración y con placer lo estudiaremos.