Plantillas de Blade con Laravel 11 - Curso Laravel 11 desde cero
Componentes de Blade en Laravel
Introducción
Si alguna vez has utilizado Vue.js o React.js, estarás familiarizado con el concepto de componentes. En Laravel también contamos con componentes de Blade, y los vamos a utilizar para crear nuestro layout y extraer el contenido repetido de nuestras vistas.
https://www.youtube.com/watch?v=cH4Nl1TB84U&list=PLpKWS6gp0jd8wsN5wSDwEFcvkD6nQ66yM&index=11
1. ¿Dónde se ubican los componentes de Blade?
Los componentes de Blade se ubican en la carpeta:
resources/views/components
Si elegimos Laravel Breeze, esta carpeta ya viene con varios archivos generados. Pero en este tutorial crearemos nuestro propio componente llamado layout.blade.php.
Nota: No necesitamos la extensión .blade.php para referenciar el componente, pero sí para el archivo en sí.
2. Creando el componente layout
Actualmente, lo único que cambia entre las vistas es el H1. Así que vamos a extraer todo el contenido repetido.
Paso 1: Copiar la estructura
Copiamos toda la parte superior de la vista (el head, el body, etc.) y la pegamos en layout.blade.php.
Luego copiamos lo que está debajo del H1 y también lo pegamos en el layout.
Paso 2: Usar la variable $slot
Dentro de todo componente de Blade tenemos disponible una variable reservada especial llamada $slot, donde se imprimirá el contenido variable.
Es como un slot en los componentes de Vue.js o como la propiedad children en los componentes de React.
blade
{{-- layout.blade.php --}}
<!DOCTYPE html>
<html>
<head>
<title>Mi App</title>
</head>
<body>
{{ $slot }}
</body>
</html>
Con esto ya tenemos nuestro componente layout.
3. Usando el componente en la vista welcome
Ahora, en la vista welcome, dejamos solamente el H1.
Opción 1: Directiva @component
blade
@component('components.layout')
<h1>Bienvenido</h1>
@endcomponent
Se asume que el componente está en resources/views/components.
Todo lo que esté dentro se imprimirá en el $slot.
Opción 2: Etiqueta de componente Blade (recomendada)
blade
<x-layout>
<h1>Bienvenido</h1>
</x-layout>
La x- apunta directamente a la carpeta components.
No necesitamos la extensión .blade.php.
Es equivalente a la opción anterior.
Comentarios en Blade
blade
{{-- Esto es un comentario en Blade --}}
4. Propiedades opcionales: El sidebar
Supongamos que queremos un sidebar opcional en la plantilla.
Paso 1: Definir la variable en el layout
blade
<aside id="sidebar">
{{ $sidebar }}
</aside>
Paso 2: Usar slots con nombre
Para imprimir estructuras HTML, usamos slots con nombre:
blade
<x-layout>
<x-slot name="sidebar">
<nav>...</nav>
</x-slot>
<h1>Bienvenido</h1>
</x-layout>
También existe una sintaxis más corta:
blade
<x-slot:sidebar>
<nav>...</nav>
</x-slot:sidebar>
Paso 3: Hacer el sidebar opcional
Si no pasamos el slot, obtendremos un error porque $sidebar no está definida. Para hacerlo opcional:
blade
@if(isset($sidebar))
<aside id="sidebar">
{{ $sidebar }}
</aside>
@endif
O usando la directiva @isset:
blade
@isset($sidebar)
<aside id="sidebar">
{{ $sidebar }}
</aside>
@endisset
5. Metatitle y metadescription
Paso 1: Modificar el layout
blade
<title>{{ $metatitle ?? 'Título por defecto' }}</title>
<meta name="description" content="{{ $metadescription ?? 'Descripción por defecto' }}">
El operador ?? verifica si la variable está definida; si no, usa el valor por defecto.
Paso 2: Pasar valores desde la vista
Opción A: Usando slots
blade
<x-slot name="metatitle">
Título de la página
</x-slot>
Opción B: Usando propiedades como atributos HTML (recomendada para strings)
blade
<x-layout metatitle="Título de la página" metadescription="Descripción específica">
<h1>Bienvenido</h1>
</x-layout>
Convención importante:
Para referenciar propiedades: kebab-case
Para definir propiedades: camelCase
La conversión se hace automáticamente.
6. Convertir la navegación en un componente
Es opcional, pero muy fácil:
Copiamos el código de la navegación a resources/views/components/nav.blade.php.
Lo usamos así:
blade
<x-nav />
Si tenemos subcarpetas dentro de components, usamos la sintaxis con punto:
blade
<x-forms.input />
La x- hace referencia a la carpeta components, luego accedemos a la subcarpeta con un punto y finalmente el nombre del componente.
7. Evaluar PHP dentro de propiedades
Supongamos que tenemos una propiedad y queremos sumar 2 + 2:
blade
<x-layout suma="2 + 2">
Si en el layout imprimimos:
blade
{{ $suma }}
Se imprimirá el string "2 + 2", no se ejecuta PHP.
Para que se evalúe como PHP, usamos dos puntos al principio:
blade
<x-layout :suma="2 + 2">
Si ya estamos tratando como string, tendríamos que encerrarlo en comillas para que funcione, pero no tendría sentido en este caso.
8. Actualizar las demás vistas
Finalmente, actualizamos las demás vistas para que usen el componente layout:
contact.blade.php
blog.blade.php
about.blade.php
blade
<x-layout metatitle="Contacto">
<h1>Contacto</h1>
</x-layout>
Resumen
¡Y listo! Ya tienes tu layout reutilizable con componentes de Blade en Laravel
Comentarios
Publicar un comentario