4.2 · Laravel : rutas, Blade, Eloquent (ORM), migraciones

Nivel 4 · Frameworks & API

4.2Laravel : rutas, Blade, Eloquent (ORM), migraciones

Objetivo: Construir con Laravel (enrutamiento, controladores, vistas Blade, ORM Eloquent, migraciones) — aplicaciones estructuradas, productivas y seguras, el corazón del PHP profesional actual.
Tiempo estimado: 13 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Enrutamiento + controladores : Route::get('/produits', [ProduitController::class, 'index']) dirige la URL hacia la acción ; Artisan genera el código.
  • Blade + Eloquent : plantillas {{ }} con escape automático (anti-XSS), y base manipulada en objetos (Produit::where(...)->get()) con consultas preparadas automáticas.
  • Reflejo de Riad : versionar la base en migraciones y entender el SQL generado (cuidado con el N+1) en lugar de sufrir el ORM.

Minicaso seguido — Riad pasa su catálogo a Laravel

El catálogo MVC de Riad (4.1) crece : lo porta a Laravel en Constantine. Declara sus rutas hacia un ProduitController, muestra con una vista Blade que escapa por defecto, lee la base vía Eloquent sin escribir SQL, y describe la tabla produits en una migración versionada con Git. Cuando un colega recupera el proyecto, un comando instala, otro migra — y la base es idéntica. Segundo hito del hilo : productivo, estructurado y seguro por defecto.

Continuación del caso 4.1 — Riad industrializa su MVC con un framework.

1. Enrutamiento, controladores, Artisan

Laravel implementa el MVC con herramientas elegantes. El enrutamiento asocia URL y acciones : Route::get('/produits', [ProduitController::class, 'index']) envía los GET hacia el método index — expresivo (GET/POST, parámetros, grupos, middlewares). Los controladores tratan las peticiones (reciben, llaman a los modelos, devuelven vista o respuesta). La línea de comandos Artisan genera controladores y modelos, lanza las migraciones : Riad crea la base en segundos en lugar de copiar-pegar.

2. Blade : las vistas seguras

Blade es el motor de plantillas : {{ $variable }} para mostrar, @foreach y @if para la lógica de presentación, layouts reutilizables por herencia. Su gran ventaja : el escape automático — los datos se escapan por defecto, lo que protege del XSS sin pensarlo. Riad sustituye su mezcla bruta de PHP/HTML por plantillas legibles y seguras.

3. Eloquent y migraciones : los datos

Eloquent es el ORM : las tablas se convierten en clases, las filas en objetos — Produit::all(), Produit::find($id), Produit::where('prix', '>', 100)->get(), $produit->save() — con consultas preparadas automáticas (anti-inyección) y relaciones elegantes. Las migraciones versionan la estructura de la base en código PHP : reproducible, trazable, esencial en equipo y en despliegue. Riad retiene dos vigilancias : entender el SQL generado y evitar el N+1 con carga anticipada (with()). Laravel añade auth, validación, CSRF automático, sesiones seguras : una excelente inversión, el framework más demandado.

Error frecuente de interpretación: « Con Eloquent, ya no necesito conocer el SQL ». No. El ORM escribe SQL en vuestro lugar — pero un mal uso genera consultas catastróficas (el N+1 : una consulta por elemento de una lista en lugar de una sola) que solo un ojo que entiende el SQL detecta. Eloquent hace productivo a quien conoce las bases SQL ; hace peligrosamente confiado a quien las ignora.
El circuito Laravel de una página Ruta → controlador → Eloquent → Blade Ruta URL hacia la accióndel controladorControlador Recibe,llama al modeloEloquent Objetos, consultaspreparadas automáticasBlade + migración Vistaescapada, base versionada
Ruta → controlador → Eloquent → Blade
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Riad declara sus rutas hacia las acciones del controlador. 2) El controlador llama a Eloquent, que manipula la base en objetos con consultas preparadas. 3) La vista Blade muestra con escape automático. 4) La estructura de la base vive en migraciones versionadas. Lección : productividad + seguridad por defecto, sin magia incomprendida.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Catálogo de productos con Laravel

Los cuatro gestos de Riad, con las API reales :

Route::get('/produits', [ProduitController::class, 'index']);
$produits = Produit::where('prix', '>', 100)->get(); // all(), find($id)
return view('produits.index', ['produits' => $produits]);
Blade : {{ $p->nom }} + @foreach ($produits as $p) ... @endforeach

Lectura : ruta, petición objeto, vista, plantilla — cada uno en su lugar.

Lección : el framework aplica el MVC y la seguridad por defecto.

Vocabulario de la sección

Laravel
El framework PHP más popular (elegante, productivo, vasto ecosistema) ; implementa el MVC con las buenas prácticas. La referencia del PHP moderno.

Ejemplo sencillo: Riad porta allí su catálogo para ir rápido sin sacrificar la estructura.

Lo que no es: una pila de scripts sin enrutamiento ni ORM.

Reflejo: pensar rutas, controladores, Blade, Eloquent, migraciones.

Enrutamiento / controladores / Artisan
Enrutamiento : URL → acciones (Route::get). Controladores : tratan las peticiones. Artisan : CLI que genera código y lanza las migraciones.

Ejemplo sencillo: La ruta /produits de Riad apunta hacia ProduitController@index, generado por Artisan.

Lo que no es: un archivo PHP por URL hecho a mano.

Reflejo: una URL = una ruta nombrada hacia una acción clara.

Blade (plantillas)
Motor de plantillas Laravel : {{ }}, @foreach, @if, layouts — con ESCAPE AUTOMÁTICO (anti-XSS por defecto).

Ejemplo sencillo: Riad muestra {{ $p->nom }} sin temer la inyección de HTML.

Lo que no es: echo PHP entremezclados con el HTML sin escape.

Reflejo: {{ }} por defecto ; {!! !!} solo con conocimiento de causa.

Eloquent (ORM)
ORM Laravel : tablas ↔ clases, filas ↔ objetos ; base manipulada en objetos/métodos, consultas preparadas automáticas, relaciones elegantes.

Ejemplo sencillo: Riad lee Produit::where('prix', '>', 100)->get() en lugar de escribir el SELECT.

Lo que no es: SQL concatenado con variables no escapadas.

Reflejo: verificar el SQL generado y cazar el N+1 con with().

Migraciones
Estructura de la base versionada en código PHP (con Git) : reproducible, trazable — esencial en equipo y en despliegue.

Ejemplo sencillo: La tabla produits de Riad nace de una migración, repetida en todas partes de forma idéntica.

Lo que no es: ALTER TABLE hechos a mano en producción.

Reflejo: nunca estructura modificada fuera de migración.

En la práctica — En la práctica — Construir con Laravel

  1. Cread un proyecto Laravel (vía Composer), explorad rutas, controladores, modelos, vistas Blade y la CLI Artisan.
  2. Definid rutas (Route::get/post) hacia controladores ; cread una vista Blade con {{ }} y @foreach (escape automático).
  3. Usad Eloquent : modelo + CRUD en objetos (all/find/where/save) sin SQL, consultas preparadas automáticas.
  4. Cread una migración para versionar una tabla ; activad la auth, la validación y la protección CSRF incluidas.
Construís aplicaciones modernas con Laravel (enrutamiento, Blade, Eloquent, migraciones) — estructuradas, productivas y seguras.

Guion listo para decir — defender el paso a Laravel (30 s)

« Soy Riad : con Laravel, nuestras rutas son explícitas, nuestras vistas Blade escapan por defecto, Eloquent prepara nuestras consultas y nuestras migraciones versionan la base. Entregamos más rápido, con la seguridad integrada en lugar de improvisarla. »

Para decir en punto técnico ; mostrad ruta + Blade + migración.

Modelo copiar-pegar — CRUD Laravel (código probado)

', 100)->get();
        return view('produits.index', ['produits' => $produits]);
    }
    public function store(Request $request) {
        $valide = $request->validate(['nom' => 'required|string|max:255', 'prix' => 'required|numeric|min:0']);
        $produit = Produit::create($valide);
        return response()->json($produit, 201);
    }
}

// resources/views/produits/index.blade.php
// @foreach ($produits as $p) 
  • {{ $p->nom }} — {{ $p->prix }} DA
  • @endforeach // database/migrations/xxxx_create_produits_table.php (extracto) // Schema::create('produits', function (Blueprint $t) { // $t->id(); $t->string('nom'); $t->decimal('prix', 10, 2); $t->timestamps(); // });

    Pequeño sitio escaparate

    Rutas + Blade bastan : reservad Eloquent para lo que merezca una base, sin sobremodelar.

    Aplicación real

    Como Riad : rutas nombradas, controladores recurso, Eloquent con carga anticipada, todo en migraciones.

    Lista que va lenta (N+1)

    Cargad las relaciones de una vez (with('categorie')) : una consulta en lugar de una por línea.

    Equipo que empieza

    Prohibid el SQL concatenado y el HTML no escapado : el framework ya hace ambas cosas.

    Prudencia: Productivo no quiere decir expuesto : validad toda entrada (validate()), dejad que Blade escape por defecto y guardad los secretos en .env, nunca en duro. Contenido pedagógico, ejemplos con datos ficticios.

    ✓ Buenas prácticas

    • Respetar el MVC impuesto por el framework.
    • Entender el SQL generado por Eloquent.
    • Versionar la base en migraciones.

    ✗ Errores frecuentes

    • Poner lógica en las plantillas Blade.
    • Ignorar el N+1 (ORM caja negra).
    • Recodificar auth/validación/CSRF ya incluidos.

    Puntos clave

    • LARAVEL = framework PHP más POPULAR : MVC, productividad, seguridad integrada. La referencia.
    • ENRUTAMIENTO (Route::get → acciones), CONTROLADORES, ARTISAN (generar, migrar).
    • BLADE : {{ }}, @foreach, ESCAPE AUTOMÁTICO (anti-XSS). ELOQUENT : objetos en lugar de SQL, preparadas automáticas, relaciones.
    • MIGRACIONES : base versionada = reproducible y trazable. Más auth, validación, CSRF automático.

    Desafío 48h — aplicad mañana

    Entregad 1 recurso CRUD con Laravel : 2 rutas + 1 vista Blade + Eloquent + 1 migración, sin una línea de SQL a mano.

    Lista de salida de la sección
    • Puedo citar rutas, Blade, Eloquent, migraciones.
    • Sé explicar el escape automático y las preparadas automáticas.
    • Tengo 1 CRUD Laravel funcionando.
    Autoevaluación 1-5 : ¿mis vistas escapan por defecto?¿mi base está totalmente en migraciones?

    Preguntas frecuentes

    ¿Qué aporta un framework como Laravel frente a PHP « a mano »?

    Estructura MVC impuesta (fin del espagueti), productividad (ORM, plantillas, enrutamiento, Artisan, decenas de funciones listas), seguridad integrada por defecto (escape Blade anti-XSS, preparadas Eloquent anti-inyección, CSRF automático, hash, auth robusta) y funciones probadas (auth, validación, sesiones, correos, archivos, tests, migraciones). Construimos aplicaciones completas mucho más rápido, con menos errores — de ahí su estatus de imprescindible pro.

    ¿Qué es un ORM como Eloquent — y hay que conocer el SQL igualmente?

    Un ORM mapea objetos ↔ tablas (tablas ↔ clases, filas ↔ objetos, columnas ↔ propiedades) : Produit::all() en lugar de SELECT *. Aportes : productividad, seguridad (preparadas automáticas), legibilidad, relaciones elegantes ($utilisateur->commandes). Pero SÍ, el SQL sigue indispensable : para entender y optimizar lo que el ORM genera (N+1, índices, joins) y para las consultas complejas. Eloquent + bases SQL = el buen dúo.

    Comprueba tu comprensión

    ¿Qué aporta Eloquent frente a SQL escrito a mano?

    Recursos adicionales (opcional, para ir más allá)

    Examen del nivel 4Preguntas inéditas y más difíciles para validar tus conocimientos