Una ruta de Laravel es la regla que relaciona una petición HTTP con el código que debe atenderla.
En PHP clásico (sin frameworks), la URL solía coincidir con el archivo. Si visitabas /contacto.php, el servidor buscaba un archivo llamado contacto.php.
En Laravel, esto se acabó. La URL es independiente del archivo. Tú decides qué URL activa qué código. Esto se hace mediante el Sistema de Rutas, y el HTML se gestiona con un motor superpotente llamado Blade.
Las rutas (routes/web.php)
El portero de tu aplicación es el archivo routes/web.php. Aquí defines todas las direcciones URL de tu web.
Sintaxis Básica:
Route::[verbo]('url', [función]);
use Illuminate\Support\Facades\Route;
// 1. Una ruta simple que devuelve texto
Route::get('/hola', function () {
return '¡Hola mundo desde Laravel!';
});
// 2. Una ruta con parámetros (ej: /producto/5)
Route::get('/producto/{id}', function ($id) {
return "Estás viendo el producto: " . $id;
});Si ahora vas a tu-sitio.test/hola, verás el mensaje. ¡Sin crear ningún archivo .php nuevo en la carpeta pública!
Las vistas y Blade
Obviamente, no vas a escribir todo tu HTML dentro de esa función en las rutas. Para eso están las Vistas. Se guardan en resources/views.
Laravel usa Blade, un motor de plantillas que hace que escribir HTML sea un placer. Los archivos deben terminar en .blade.php.
¿Por qué Blade es mejor que PHP puro? Mira la diferencia para imprimir una variable y escapar XSS (seguridad):
- PHP Puro:
Hola, <?= htmlspecialchars($nombre) ?> - Blade:
Hola, {{ $nombre }}
Blade hace el htmlspecialchars automáticamente por ti. Es más limpio y más seguro.
De la ruta a la vista
Vamos a conectar ambos mundos.
Paso 1: Crear la vista (resources/views/inicio.blade.php)
<h1>Bienvenido, {{ $nombre }}</h1>
<p>Hoy es {{ date('d/m/Y') }}</p>Paso 2: Devolver la vista desde la ruta (routes/web.php)
Route::get('/', function () {
// La función view() busca el archivo en resources/views
// El segundo parámetro es un array con los datos que pasamos a la vista
return view('inicio', ['nombre' => 'Carlos']);
});Directivas de Blade
Blade elimina la necesidad de abrir y cerrar etiquetas <?php ... ?> constantemente. Usa directivas que empiezan por @.
Condicionales (if):
@if ($edad >= 18)
<p>Eres mayor de edad</p>
@else
<p>Acceso denegado</p>
@endifBucles (foreach):
<ul>
@foreach ($productos as $producto)
<li>{{ $producto->nombre }} - {{ $producto->precio }}€</li>
@endforeach
</ul>Layouts: el fin de require 'header.php'
En el Módulo 8 (y en PHP clásico), para no repetir el menú y el footer en todas las páginas, hacías require 'header.php'.
Blade le da la vuelta a la tortilla con la Herencia de Plantillas. Creas una plantilla maestra (“Layout”) con los huecos vacíos, y las páginas rellenan esos huecos.
El Layout Maestro (resources/views/layout.blade.php):
<html>
<body>
<nav>Mi Menú Fijo</nav>
<div class="contenido">
@yield('contenido')
</div>
<footer>Mi Pie de Página Fijo</footer>
</body>
</html>La Página Hija (resources/views/perfil.blade.php):
@extends('layout')
@section('contenido')
<h1>Mi Perfil</h1>
<p>Este es el contenido único de esta página.</p>
@endsectionResultado: Laravel combina ambos archivos automáticamente. Si cambias el menú en el layout, cambia en toda la web.