IronWoods.es

Desarrollo web

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.

Conceptos básicos de Blade

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.

Extendiendo Blade

Directivas 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.

Componentes

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.

Composers

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.