Tema
¿Qué es Laravel?
En esta lección entenderás qué es un framework, por qué Laravel se volvió el estándar para hacer aplicaciones web con PHP y cómo viaja una petición desde el navegador hasta tu código. Es la base mental que necesitas antes de escribir una sola línea.
Concepto
¿Qué es un framework?
Imagina que vas a construir una casa. Con PHP puro empiezas fabricando tus propios ladrillos, tus puertas y hasta tus tornillos. Funciona, pero tardas muchísimo y cada casa queda distinta.
Un framework es como comprar una casa prefabricada de buena calidad: los cimientos, la instalación eléctrica y las tuberías ya están hechos y probados. Tú te dedicas a lo que hace única a esa casa: la distribución, los acabados y la decoración (la lógica de negocio de tu cliente).
Laravel es un framework de PHP creado por Taylor Otwell en 2011. Hoy es el más usado del ecosistema PHP gracias a:
- Sintaxis expresiva: el código se lee casi como una frase en inglés.
- Baterías incluidas: rutas, ORM, plantillas, validación, autenticación, correos, colas, caché, pruebas...
- Seguridad por defecto: protección CSRF, escape de HTML en las vistas, consultas preparadas y hash de contraseñas sin que tengas que pensarlo.
- Comunidad enorme: tutoriales, paquetes y respuestas para casi cualquier problema.
El patrón MVC en Laravel
Si hiciste la lección de MVC desde cero, ya conoces la idea. Laravel la aplica así:
| Capa | Qué hace | Dónde vive en Laravel |
|---|---|---|
| Modelo | Representa los datos y habla con la base de datos | app/Models (Eloquent) |
| Vista | Genera el HTML que ve el usuario | resources/views (Blade) |
| Controlador | Recibe la petición, usa modelos y devuelve una vista o JSON | app/Http/Controllers |
A eso se suman las rutas (routes/web.php), que deciden qué controlador atiende cada URL.
El ciclo de vida de una petición
Cuando alguien visita https://mitienda.com/productos/5, pasa esto:
txt
Navegador
│ GET /productos/5
▼
public/index.php ← único punto de entrada (front controller)
│
▼
bootstrap/app.php ← arranca la aplicación, registra middleware y rutas
│
▼
Middleware ← filtros: sesión, CSRF, ¿está logueado?...
│
▼
Router (routes/web.php) ← busca qué ruta coincide con GET /productos/5
│
▼
Controlador ← ProductoController@show(5)
│ ├── Modelo (Eloquent) → consulta a MySQL
│ └── Vista (Blade) → genera HTML
▼
Respuesta HTTP ← vuelve por el middleware y llega al navegadorLo importante: todas las peticiones entran por public/index.php. Por eso, en el servidor, la carpeta pública del dominio debe apuntar a public/ y no a la raíz del proyecto (lo verás en Despliegue).
Ejemplo
Comparemos la misma tarea —mostrar un producto por su id— en PHP puro y en Laravel.
php
<?php
// Conexión manual a la base de datos
$pdo = new PDO('mysql:host=localhost;dbname=tienda;charset=utf8mb4', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Leer y validar el parámetro a mano
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if (!$id) {
http_response_code(404);
exit('Producto no encontrado');
}
// Consulta preparada
$stmt = $pdo->prepare('SELECT * FROM productos WHERE id = ?');
$stmt->execute([$id]);
$producto = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$producto) {
http_response_code(404);
exit('Producto no encontrado');
}
?>
<h1><?= htmlspecialchars($producto['nombre']) ?></h1>
<p>Precio: $<?= number_format($producto['precio'], 2) ?></p>php
<?php
use App\Models\Producto;
use Illuminate\Support\Facades\Route;
// Laravel busca el producto por id automáticamente.
// Si no existe, responde 404 solo.
Route::get('/productos/{producto}', function (Producto $producto) {
return view('productos.show', ['producto' => $producto]);
});blade
{{-- Las dobles llaves escapan el HTML automáticamente (anti XSS) --}}
<h1>{{ $producto->nombre }}</h1>
<p>Precio: ${{ number_format($producto->precio, 2) }}</p>En Laravel no escribiste la conexión (está en .env), ni la consulta SQL (la hace Eloquent), ni la validación del id, ni el 404, ni el htmlspecialchars. Menos código = menos errores.
El ecosistema de Laravel
Laravel no es solo el framework; alrededor tiene herramientas oficiales que irás usando:
| Herramienta | Para qué sirve |
|---|---|
| Artisan | La consola de comandos de Laravel (php artisan ...) |
| Eloquent | ORM: trabajas con la base de datos usando objetos PHP |
| Blade | Motor de plantillas rápido y sencillo |
| Breeze | Kit de inicio con login, registro y perfil |
| Sanctum | Autenticación para APIs y SPAs |
| Herd | Entorno local con PHP y Nginx en un clic (Windows y macOS) |
| Sail | Entorno local con Docker |
| Pest / PHPUnit | Pruebas automatizadas |
| Forge / Cloud | Servicios de pago para desplegar en servidores |
| Livewire / Inertia | Interfaces interactivas sin (o con) un framework JS |
No necesitas aprenderlas todas hoy; el curso te las presenta cuando hacen falta.
Casos de uso reales
- Panel administrativo para un negocio: inventario, ventas, clientes y reportes en PDF.
- Sistema de citas: un consultorio que agenda pacientes y envía recordatorios por correo (colas + correos).
- API para una app móvil: Laravel sirve JSON a una app hecha en Flutter o React Native (Sanctum).
- Tienda en línea: catálogo, carrito, pagos con Stripe o Mercado Pago.
- SaaS: plataforma con suscripciones donde cada cliente tiene su cuenta.
Buena práctica
Aprende primero PHP puro y luego Laravel. Cuando algo "mágico" de Laravel no funcione, entender qué hay debajo (PDO, sesiones, $_POST) te permitirá depurarlo en minutos en lugar de horas.
¿Laravel 11 o 12?
Laravel 11 (marzo 2024) introdujo la estructura simplificada: sin app/Http/Kernel.php, configuración centralizada en bootstrap/app.php y menos archivos por defecto. Laravel 12 mantiene esa estructura casi sin cambios (sobre todo actualiza dependencias y kits de inicio). Todo lo que aprendas aquí aplica a ambas versiones.
Error común
Seguir tutoriales viejos (Laravel 8, 9 o 10) sin darte cuenta. Si un tutorial te dice que edites app/Http/Kernel.php o app/Providers/RouteServiceProvider.php y esos archivos no existen en tu proyecto, es porque el tutorial es anterior a Laravel 11. Busca la forma moderna: casi siempre está en bootstrap/app.php.
Ejercicios
- Explica con tus palabras qué hace
public/index.phpy por qué es el único archivo que debe ser accesible desde internet. - Ordena correctamente estos pasos del ciclo de una petición: Controlador, Middleware, public/index.php, Router, Respuesta.
- Piensa en un negocio de tu ciudad (una taquería, un gimnasio, una papelería) y escribe 3 funcionalidades que podrías construirle con Laravel e indica qué parte de MVC interviene en cada una.
Ver solución
public/index.phpes el front controller: recibe todas las peticiones, carga el autoload de Composer y arranca la aplicación. Solo él debe ser público porque el resto del proyecto contiene código, configuración y el archivo.envcon contraseñas; si fueran accesibles desde el navegador, cualquiera podría leerlos.Orden correcto:
txt
public/index.php → Middleware → Router → Controlador → Respuesta(La respuesta vuelve a pasar por el middleware antes de salir al navegador.)
- Ejemplo para un gimnasio:
- Registro de socios: modelo
Socio(Modelo), formulario de alta (Vista),SocioController@storeguarda los datos (Controlador). - Control de pagos mensuales: modelo
Pagorelacionado conSocio, listado de socios con pago vencido. - Recordatorio por correo cuando vence la membresía: un job en cola que envía un correo.
- Registro de socios: modelo
Resumen
- Laravel es un framework PHP que resuelve lo repetitivo (rutas, BD, vistas, seguridad) para que te enfoques en el negocio.
- Sigue el patrón MVC: modelos en
app/Models, vistas enresources/views, controladores enapp/Http/Controllers. - Toda petición entra por
public/index.php, pasa por middleware, el router y un controlador. - Trae seguridad por defecto: CSRF, escape de HTML, consultas preparadas y hash de contraseñas.
- Este curso usa Laravel 11/12: la configuración principal vive en
bootstrap/app.php.