¿Que necesidad hay de andar creando un componente en Laravel?
Laravel
es un framework basado en componentes y esta es una de sus características y quizás la mas
importante de todas, que lo hace tan útil, sencillo y potente a la
vez.
Los
componentes dicho de forma rápida son un conjunto de funciones, scripts y/u otros elementos que pueden que crean una funcionalidad y que son
reusables.
Piensa
en una pieza de ropa o un accesorio
femenino que puedes combinar(usar), con varias otras prendas, sin que pierda
funcionalidad, y para diferentes ocasiones y tantas veces como quieras.
Hay diferentes tipos de componentes, voy a centrarme hoy en construir uno en Blade el gestor de plantillas Blade
Un componente en Blade, cumple la misma función que la combinación entre las directrices section y layouts, por tanto es una alternativa a esta, digamos más moderna.
Consta
de dos variables, el component y el slot. Mientras que el component es la
estructura general, slot es la parte
dinámica que inyectaremos en el.
Crear
un componente
El primer paso para crear un componente Blade, considerando que va a estar relacionado con las vistas, es colocarlo dentro del área que tiene que ver con las capas(layouts) de las vistas, así que en la ruta resources/views/layouts, creamos una carpeta llamada componentes.
Luego crearemos un archivo, que contendrá la lógica del
componente.
El compenente, que vamos a construir, va a llamarse curric_autor, y se encargará de mostrar una pequeña nota al final de cada articulo que publiquemos en nuestro blog.
Estará colocado a la izquierda de la página, e incluirá la foto del autor y un pequeño texto con su descripción.
A este archivo lo nombraremos curric_autor.php
y lo guardaremos en la carpeta
componentes que hemos creado.
El próximo paso es escribir nuestro código, el cual podría ser este:
<divclass = flex-row comd-6>
<div class=d- flexjustify-content-end col-md-9>
<spanclass= text-justify> Amante del codigo, y de las mascotas con garras.</span>
<divclass="text-center col-md-3">
<imgsrc="..."class="rounded"alt="...">
</div>
</div>
</div>
Una vez creado el componente podemos usarlo de diferente modo:
Podemos llamarlos desde nuestra vista e inyectarlo en la vista siguiendo las directivas @ de Blade.
@component('layouts.components.curric_autor')
@endcomponent
Con esto será suficiente, pero ¿que sucede si en el blog publica
más de un autor y por tanto los datos que usamos necesitan ser extraidos
dinámicamente de la base de datos?
Tendríamos entonces que añadir en el código del componente variables necesarias para que recojan esta dinámica, y lo haríamos con $autor
que representará al modelo autor que posee varios atributos, lema, avatar_alt
y avatar
, y para añadirlos seria asi:
<div class = flex-row col-md-6 >
<div class=d- flexjustify-content-end col-md-9>
<spanclass= text-justify> {{$autor->lema}}.</span>
<divclass="text-center col-md-3">
<imgsrc="{{$autor->avatar}}..."class="rounded"alt=" {{$autor->avatar_alt}}">
</div>
</div>
</div>
Una alternativa es que no extraigamos valores de la base de datos y solo necesitemos introducir variables que llevan valores estaticos.
<div class = flex-row col-md-6 >
<div class=d- flexjustify-content-end col-md-9>
<spanclass= text-justify> {{$autor}}.</span>
<divclass="text-center col-md-3">
<imgsrc="{{$avatar}}..."class="rounded"alt=" {{$avatar_alt}}">
</div>
</div>
</div>
Llamar al componente
Ahora al llamar el componente desde la vista añadiríamos la directiva slot que es la encargada de traernos el valor de esas variables.
@component('layouts.components.navbar')
@slot('autor')
colocamos aquí el valor
@endslot
@slot('avatar')
colocamos aquí el valor
@endslot
@endcomponent
@slot('avatar_alt')
colocamos aquí el valor
@endslot
Esto pudiéramos hacerlo también de otro modo, gracias a la ductilidad de Laravel. Esta via por cierto es un poco más robusta.
Para ello declararemos, nuestro componente en el proveedor de servicios de Laravel, en su función boot()
Leer mas sobre Laravel
Antes de hacer esto debemos decirle al proveedor de servicios que vamos a usar una instancia de la fachada Blade, asi que tendremos que incluir al inicio la sentencia.
use Illuminate\Support\Facades\Blade;
//Luego podemos ya incluir en la función boot, lo siguiente:
Blade::component('layouts.components.curric_autor,'autor');
Con esto le estamos diciendo a Laravel primero donde se
encuentra el componente, y segundo nombre que utulizaremos para llamarlo,
entendemos entonces que la estructura
es:
(ruta o namespace del componente, alias del componente)
Entonces, ahora podremos llamar al componente, desde cualquier lugar con la directriz @y su alias, en nuestro caso será:
@autor
Quedando el modo de llamar a nuestro componente como:
@autor(['autor'=>'valor', 'avatar'=>'valor', 'avatar_alt'=>'valor',]) @endautor
Y listo, esto es todo.
Espero
modestamente que este artículo, sirva de ayuda a alguien.
Gracias.
….un sueño es casi todo y más que nada, más que todo al soñarlo, casi nada después……