Laravel proporciona un sistema de componentes para Blade que podemos utilizar para crear todo tipo de componentes reusables. En este videotutorial vamos a explorar cómo podemos crear layouts utilizando esta característica del framework.

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

Podemos crear un nuevo componente desde la terminal usando el siguiente comando:

php artisan make:component layout

Una vez ejecutado el comando deberíamos recibir el mensaje Component created successfully.

Los componentes son creados dentro del directorio app/View/Components

En nuestro caso este componente debería llamarse Layout.php y dentro de este archivo encontramos un método público llamado render. Este método, como su nombre lo indica, se encarga de retornar la vista components.layout.

Encontramos la vista dentro del directorio resources/views/components

Al trabajar con componentes en lugar de utilizar la directiva @yield, vamos a imprimir el contenido de la variable $slot.

En el caso del título, en lugar de utilizar la directiva @yield, imprimiríamos el contenido de la variable $title. En caso de que esta variable no esté definida, vamos a imprimir el título «App de notas», que será nuestro título por defecto:

{{ $title ?? 'App de notas' }}

Para hacer uso del componente en otra vista como create.blade.php, eliminamos las directivas @extends y @section, y en su lugar, añadimos la etiqueta <x-layout>. Todo el contenido que vaya dentro de estas etiquetas será considerado el valor de la variable $slot.

<x-layout>
    <!-- Contenido de la vista -->
</x-layout>

Para personalizar el título, debemos hacer uso de la directiva <x-slot>. El nombre del «slot» en este caso será title, y su contenido será nuestro título personalizado.

<x-slot name="title"> 
    Nueva nota
</x-slot>

También podemos utilizar la sintaxis <x-slot:title>Nueva nota</x-slot:title>

Podemos pasar datos o variables desde el código de nuestro componente a nuestra vista, de la misma forma que lo haríamos desde un controlador:

return view('components.layout', ['currentYear' => date('Y')]);

Ahora, en nuestra vista podemos hacer uso de la variable $currentYear.

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

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

Lección anterior Layouts tradicionales con Laravel 10 y Blade Lección siguiente Generar URLs con Laravel 10