Documentacion Blade

12
Qué es y cómo funciona Blade Blade es básicamente un sub-lenguaje muy sencillo, que antes de ser usado por nuestra aplicación, es compilado a PHP plano. Para usar Blade, simplemente creen sus plantillas en el directorio views/ con la extensión .blade.php en vez de .php. Por ejemplo: Código : views/template.blade.php Ahora creen una ruta o controlador que llame a la plantilla ( ya saben cómo, ¿Cierto? ) En caso de que no… En app/routes.php pongan esto: Código : Route::get('template', function () { return View::make('template'); }); Ahora en views/template.blade.php escriban algo de HTML: Código : <h1>Hello Cristalab</h1>

description

Documentacion Blade

Transcript of Documentacion Blade

Page 1: Documentacion Blade

Qué es y cómo funciona Blade

Blade es básicamente un sub-lenguaje muy sencillo, que antes de ser usado por nuestra aplicación, es compilado a PHP plano. Para usar Blade, simplemente creen sus plantillas en el directorio views/ con la extensión .blade.php en vez de .php.

Por ejemplo:

Código :

views/template.blade.php

Ahora creen una ruta o controlador que llame a la plantilla (ya saben cómo, ¿Cierto?)

En caso de que no… En app/routes.php pongan esto:

Código :

Route::get('template', function () {

   return View::make('template');

});

Ahora en views/template.blade.php escriban algo de HTML:

Código :

<h1>Hello Cristalab</h1>

Bastante básico, es decir, en este punto da igual si usamos Blade o no… Pero, vamos a ver:

Page 2: Documentacion Blade

Cómo escribir vistas dinámicas con Blade

Ok, supongamos que, como en ejemplos anteriores, queremos usar un nombre variable:

Código :

Route::get('template/{name}', function ($name) {

   $name = ucwords(str_replace('-', ' ', $name));

   return View::make('template')->with('name', $name);

});

En este caso, para hacer el ejemplo más interesante, lo pasamos por la ruta, y luego lo asignamos a la vista, con el método ->with() que va concatenado a View::make, fíjense:

Código :

View::make('template')->with('name', $name)

Ok, ahora en nuestra vista, si estuviéramos usando sólo PHP, tendríamos que escribir algo así:

Código :

<h1>Hello <?php echo $name ?></h1>

Pero gracias a Blade, podemos escribirlo así:

Código :

Page 3: Documentacion Blade

<h1>Hello {{ $name }}</h1>

Básicamente: {{ }} es un sustituto de <?php ?> que por un lado es más corto y fácil de escribir, por otro usar etiquetas PHP (<? ?>) se “mezcla” con las etiquetas del HTML, así que usar motores como Blade es más “limpio” por así decirlo.

Blade sólo reemplaza {{ * }} por <?php echo * ?>, es decir, todo el código PHP que quieras escribir es válido dentro de {{ }}, por ejemplo:

Código :

<h1>Hello {{ strtoupper($name) }}</h1>

Otros motores de plantillas para PHP más avanzados

como Smarty o Twig compiladores más poderosos, que permiten usar, por

ejemplo, sintaxis de punto para los arrays, la cual no es soportada por PHP,

etc.

Cómo escribir estructuras de control con Blade

Por último veremos cómo se escriben estructuras de control sencillas pero muy comunes como IF y FOREACH.

Blade tiene una sintaxis bien simple, por ejemplo:

Código :

@if ($name == 'Walter White' OR $name == 'Jesse Pinkman')

  <h1>Goodbye Breaking Bad</h1>

@else

Page 4: Documentacion Blade

  <h1>Hello {{ $name }}</h1>

@endif

Nuevamente, todo lo que está dentro del paréntesis del IF es PHP común y corriente, lo que cambia es que en vez de escribir:

Código :

<?php if (...): ?>

O:

Código :

<?php if (...) { ?>

Escribimos:

Código :

@if (...)

Es una sintaxis mucho más limpia y adecuada para nuestras vistas…

Por supuesto, si están escribiendo los ejemplos pueden ejecutarlos en el navegador, escribiendo algo como:

Código :

Page 5: Documentacion Blade

http://localhost/pruebalaravel/public/template/walter+white

Esto es con respecto a la sintaxis, pero Blade también nos brinda una herramienta potente para escribir vistas:

Uso de Layouts en Laravel con Blade

Casi todos los proyectos, por no decir todos, tienen un “layout” que consiste, por lo general en un header + un footer. Por ejemplo fíjense Cristalab.com ¿Han visitado esa página? Todas las páginas dentro del site cristalab.com llevan en la cabecera el logo de Cristalab + el menú etc. y en el pie de página tiene el menú repetido y la foto de Freddier en un pony (bueno no, pero sería más divertido).

Ese HTML que se repite en cada página se llama layout y en Blade podemos escribirlo así:

Creen una vista llamada:

Código :

views/layout.blade.php

Con el siguiente HTML de ejemplo:

Código :

<html lang="en">

  <head>

    <meta charset="utf-8">

    <title>Aprendiendo Laravel</title>

Page 6: Documentacion Blade

  </head>

  <body>

      @yield('content')

      <hr />

      Copyright 2013 - Todos los ponies reservados.

  </body>

</html>

Y luego en views/template.blade.php coloquen lo siguiente:

Código :

@extends ('layout')

@section ('content')

  <h1>Hello {{ $name }}</h1>

@stop

El PHP en nuestra ruta sigue igual, es decir, seguiremos invocando a template, no a layout:

Page 7: Documentacion Blade

Código :

View::make(‘template’)

Pero template a su vez “extiende” la plantilla layout, como si fuera un objeto hijo que extiende de un objeto padre:

Código :

<!-- views/template.blade.php →

@extends ('layout')

Ahora, si se fijan, en views/layout.blade.php pueden ver lo siguiente, dentro del body:

Código :

@yield('content')

Esa etiqueta de Blade permite definir una “sección” dinámica que puede ser reemplazada en la plantilla “hijo”, en este caso template.blade.php usando las etiquetas:

Código :

@section ('content')

<!-- HTML AQUI -->

@stop

Page 8: Documentacion Blade

Fíjense que “content” es el nombre de la sección en ambas plantillas. Por supuesto podemos crear tantas secciones como queramos:

Código :

<!-- views/layout.blade.php -->

<html lang="en">

  <head>

    <meta charset="utf-8">

    <title>@yield('title', 'Aprendiendo Laravel')</title>

  </head>

  <body>

      @yield('content')

      <hr />

      Copyright 2013 - Todos los ponies reservados.

  </body>

</html>

Noten que el título HTML cambió a:

Código :

 <title>@yield(‘title’, ‘Aprendiendo Laravel’)</title>

En este caso el segundo parámetro de @yield sería el valor por defecto, es

Page 9: Documentacion Blade

decir, si abrimos en el navegador nuestra dirección:

Código :

http://localhost/pruebalaravel/public/template/cristalab

Seguiremos viendo en el título del mismo la frase: Aprendiendo Laravel, que es nuestro título por defecto. 

Pero si cambiamos views/template.blade.php a:

Código :

@extends ('layout')

@section ('title') Saludos a {{ $name }} @stop

@section ('content')

  <h1>Hello {{ $name }}</h1>

@stop

Entonces el título ahora será, por ejemplo: “Saludos a Cristalab”. Tengan en cuenta que pueden crear tantas secciones como gusten, y que cada sección puede tener un valor por defecto y un valor distinto en cada sub-plantilla. Además pueden usar variables, etc. en cada sección.

Para finalizar, 2 tips:

1. En HTML, como ya deben saber, los comentarios se escriben así:

Page 10: Documentacion Blade

Código :

<!-- comentario -->

Y suelen ser útiles cuando el HTML que escribimos es muy complicado, sin embargo dichos comentarios se envían al navegador junto con el resto de las etiquetas, y esto no es siempre lo que queremos, dado que cualquiera podría leerlos y hacen el HTML un poco más pesado, etc…

Con Blade podemos escribir comentarios así:

Código :

{{-- Esto es un comentario --}}

Dichos comentarios no son compilados como HTML ni enviados al navegador.

2. A veces Blade no es suficiente y necesitamos PHP en nuestras plantillas, por ejemplo, para asignar una variable:

Código :

<?php $user = Auth::user() ?>

Es posible usar PHP plano dentro de Blade, sólo traten de mantener sus plantillas lo más limpias posibles, limiten el uso de PHP, y si en tal caso lo necesitan, escriban sólo sentencias sencillas y preferiblemente al inicio de la plantilla.