En esta lección continuaremos aprendiendo sobre Blade, el motor de plantillas de Laravel, para ello vamos a pasar algunas notas desde nuestra ruta hacia la vista y a iterarlas usando este motor de plantillas.

Mira el código en GitHub: actual, resultado, comparación.

A continuación, vamos a hacer nuestro listado de notas dinámico pasando algunas notas ficticias a la vista:

Route::get('/', function () {
    $notes = [
        'Primera nota',
        'Segunda nota',
        'Tercera nota',
        'Cuarta nota',
        'Quinta nota',
    ];

    return view('notes', ['notes' => $notes]); // o ->with('notes', $notes) o ->withNotes($notes)
});

Y luego mostrándolas en la plantilla notes.blade.php:

@foreach ($notes as $note)
    <div class="card card-small">
        <div class="card-body">
            <h4>{{ $note }}</h4>
    
            <p>
                {{ $note }}
            </p>
        </div>
    
        <footer class="card-footer">
            <a href="link" class="action-link action-edit">
                <i class="icon icon-pen"></i>
            </a>
            <a class="action-link action-delete">
                <i class="icon icon-trash"></i>
            </a>
        </footer>
    </div>
@endforeach

Puedes ver que estoy utilizando la sintaxis de Blade, el motor de plantillas de Laravel.

La directiva @foreach reemplaza a <?php foreach(...) ?> y las interpolaciones con llaves reemplazan a <?php echo e($var) ?>

Cuando usamos Blade, Laravel se encarga de «compilar» este HTML con sintaxis de Blade a HTML mezclado con PHP y almacena el resultado en storage/framework/views, por lo que no perdemos rendimiento al trabajar con Blade.

Blade nos protege de ataques de tipo XSS al «compilar» nuestras interpolaciones a <?php echo e($var) ?>, puesto que la función helper e de Laravel escapa los caracteres con htmlspecialchars.

Blade nos permite usar directivas que no existen en el lenguaje PHP, como por ejemplo @forelse para mostrar un mensaje si el listado de notas está vacío:

@forelse ($notes as $note)
<div class="notes__item card shadow-sm">
    <!-- HTML -->
</div>
@empty
    <p>No has agregado ninguna nota hasta el momento. <a href="#">Agregar nota</a></p>
@endforelse

Si en routes/web.php pasas un arreglo vacío a la vista de notas, verás este último mensaje.

Por supuesto lo anterior lo habríamos podido lograr usando la directiva @if con @foreach y también podríamos no usar Blade sino PHP plano (para ello debes renombrar las extensiones de tus vistas de .blade.php a solo .php), pero trabajar con Blade es muy conveniente y nos permite escribir plantillas más limpias.

Ignorar interpolaciones y directivas de Blade

Si estás usando frameworks o librerías como Vue.js o Alpine, es posible que quieras que ciertas interpolaciones sean ignoradas, para que sean enviadas de forma literal al navegador. Para ello, simplemente antecede un signo de arroba antes de la interpolación y ésta será ignorada por Blade: @{{ javascript }}. Lo anterior enviará al navegador la cadena literal: {{ javascript }}

También puedes ignorar directivas de Blade con 2 signos de arroba: @@foreach. Esto enviará al navegador la cadena literal: @foreach.

Para ignorar largos fragmentos de una plantilla de Blade puedes usar la directiva verbatim:

@verbatim

     <p> {{ var }}</p> 

@endverbatim

Obtendrás como resultado en el navegador el HTML: <p> {{ var }}</p>.

En las lecciones siguientes continuaremos haciendo nuestras vistas más dinámicas, agregando los enlaces y mucho más.

Material Relacionado

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Copiar plantillas de HTML y CSS estáticas a Laravel 9