Para cerrar esta primera parte de los tutoriales quiero mostrarles cómo funcionan las vistas en Laravel. Este es quizás el tutorial más fácil de todos. Veremos cómo usar el sistema de plantillas de Laravel llamado Blade.
No te pierdas los anteriores tutoriales de Laravel:
- introducción a Laravel,
- su instalación,
- Cómo configurar la base de datos y crear migraciones,
- las rutas
- y los controladores.
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:
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 :
<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>
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 <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 :
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> </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:
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
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 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í:
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.
Visiten la documentación oficial para obtener más ejemplos sobre Blade
Espero les haya gustado este tutorial, recuerden que todo esto se irá profundizando más adelante, por ahora es sólo un bosquejo para que se familiaricen con todos estos conceptos…
Stay tuned.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Luis el 04 de Octubre de 2013
Y, en caso de que vuelvas a hacer más, cuando crees que podamos ver uno nuevo? gracias
Por Duilio el 04 de Octubre de 2013
Por Nico el 06 de Octubre de 2013
Por rezme el 06 de Octubre de 2013
Por xadrijo el 25 de Octubre de 2013
Por Miguel Angel Torres el 06 de Noviembre de 2013
Explicas muy muy bien. Y tú haces que esto sea más divertido.
Por favor sigue así con estos tutos tan buenos.
Por daniel el 11 de Enero de 2014
Por iObed el 20 de Enero de 2014
@extends ('layout')
Por nando_colombia el 26 de Febrero de 2014
Disculpen mi ignorancia, tengo una pregunta,
donde queda el enrrutamiento en este ejemplo?
Por delzep el 11 de Abril de 2014
Por Lleoz el 29 de Abril de 2014
Por Marc el 27 de Noviembre de 2014
Route::get('menu', function()
{
return View::make('menu');
});
Por Beric el 15 de Enero de 2015
Por Alex el 16 de Enero de 2015
Primera parte:
http://www.cristalab.com/tutoriales/introduccion-a-laravel-c111339l/
http://www.cristalab.com/tutoriales/como-instalar-laravel-y-composer-c111363l/
http://www.cristalab.com/tutoriales/configurar-base-de-datos-y-crear-tablas-con-laravel-c111394l/
http://www.cristalab.com/tutoriales/primeros-pasos-con-laravel-c111484l/
http://www.cristalab.com/tutoriales/controladores-y-mvc-con-laravel-c111505l/
http://www.cristalab.com/tutoriales/blade-el-sistema-de-plantillas-de-laravel-c111587l/
Segunda parte:
Tutorial, paso a paso, de cómo escribir un módulo CRUD con Laravel
http://www.cristalab.com/tutoriales/crear-un-modulo-de-usuarios-con-laravel-c111632l/
http://www.cristalab.com/tutoriales/modulo-de-usuarios-ii-integra-bootstrap-con-laravel-c111641l
http://www.cristalab.com/tutoriales/modulo-de-usuarios-iii-crear-un-formulario-con-laravel-c111645l/
http://www.cristalab.com/tutoriales/modulo-de-usuarios-ivvalidar-formulario-y-guardar-datos-con-laravel-c111651l/
http://www.cristalab.com/tutoriales/modulo-de-usuarios-v-lista-y-paginacion-con-laravel-c111682l/
http://www.cristalab.com/tutoriales/modulo-de-usuarios-vi-editar-un-registro-con-laravel-c111683l/
http://www.cristalab.com/tutoriales/modulo-de-usuarios-vii-eliminar-un-registro-con-laravel-c111925l/
Otros artículos:
http://www.cristalab.com/tutoriales/mejora-tus-habilidades-como-programador-c112068l/
http://www.cristalab.com/blog/porque-elegir-laravel-en-vez-de-codeigniter-c111947l/
http://www.cristalab.com/blog/4-tendencias-web-para-el-2014-y-4-que-ya-deberias-dominar-c112142l/
Otros tutoriales:
http://www.cristalab.com/tutoriales/instalar-laravel-en-ubuntu-c112120l/
http://www.cristalab.com/tutoriales/dominio-virtual-para-laravel-en-ubuntu-c112358l/
http://www.cristalab.com/tutoriales/crear-un-login-con-laravel-c112460l/
http://www.cristalab.com/tutoriales/enviar-emails-con-laravel-c111621l/
Inyección de dependencias
http://www.cristalab.com/tutoriales/poo-inyeccion-de-dependencias-c112370l/
http://www.cristalab.com/tutoriales/poo-inyeccion-de-dependencias-ii-c112571l/
http://www.cristalab.com/tutoriales/poo-inyeccion-de-dependencias-en-laravel-iii-c112574l/
Por cga el 09 de Junio de 2016
Por Onill el 10 de Noviembre de 2017
Saludos.