Blog / Laravel / Vistas de Laravel
Blade es el sistema de templates de Laravel para construir vistas. Un motor de plantillas sencillo y fácil de usar, para crear vistas estructuradas y limpias.
Blade es el sistema de templates de Laravel para construir vistas. Un motor de plantillas sencillo y fácil de usar, para crear vistas estructuradas y limpias.
Blade se basa en templates o fragmentos usados para construir una página, directivas, que son etiquetas con funciones concretas como @csrf (imprime el token CSRF en un input oculto), @if(condicion) e @endif o @include(ruta.nombre-template-blade) entre muchas otras.
Podemos imprimir strings, números, etc. contenidos en una variable:
{{ $miString
}}
.
Añadir comentarios sólo disponibles en el template:
{{-- comentario Blade --}}
.
Hay mucho más, en la documentación de Laravel / Blade.
Se pueden
crear nuevas directivas de Blade,
para funciones concretas, por ejemplo, puedo usar
@iva(21)
en un template Blade para mostrar
IVA: 21 %
,
si creo la directiva "iva" y hago que devuelva ese contenido.
Algo a tener en cuenta es que
una directiva que recibe contenido siempre trata este como un string.
Por ejemplo, si tratara de imprimir el IVA con
@iva($number)
en la página veré $number
y no el contenido de esta variable.
La directiva anterior es muy sencilla, sería más útil poder usar una que recibiera una cantidad, un tipo de IVA o de otro tipo de impuesto y su nombre en este caso, por ejemplo, para el recargo de equivalencia (RE) y devolviera la cantidad y el tipo del impuesto.
Para usar esta nueva directiva, en la vista:
@tax(
200,
5.2,
'RE'
)
.
Como resultado esperamos:
RE: 10,4 €
.
Pero, como he mencionado, las directivas "reciben" un string
y lo que veríamos en la página, realmente, sería:
200, 5.2, 'RE'
,
no lo esperado.
Para resolver el problema anterior, podemos
usar un componente.
La llamada entonces sería:
<x-tax :quantity=200
:percentage=5.2,
:tax='RE' />
Introducidos en Laravel 7, su sintaxis me parece una ñapa,
es más atractivo crear una función y llamarla como a cualquier variable:
{{
printTax(
200,
5.2,
'RE'
)
}}
.
En este caso, la función puede devolver un string, pero estaría "feo", usarla si tuviéramos que componer HTML.
Otra necesidad que surge, tarde o temprano, al trabajar con templates Blade, es la de disponer de un dato en varias páginas.
Habitualmente cada página se carga a raíz de una petición que pasa por un método de un controlador. Este devuelve la vista y la información que ésta necesita.
Cuando un dato se usa en varias páginas o en todas no podemos devolverlo en cada método de cada controlador usado para devolver una vista. Bueno, sí podemos, pero sería malo por varias razones...
Para estas situaciones tenemos los ViewComposers.
15-11-2020