Laravel Jetstream + Inertia + Vue
Tutorial para Principiantes: Laravel Jetstream + Inertia + Vue
¡Hola! Te voy a explicar este tutorial como si fuera tu primera vez programando. No te preocupes si no entiendes todo a la primera, ¡es normal! Vamos paso a paso.
📁 Parte 1: ¿Qué es cada cosa?
Imagina que estás construyendo una casa:
Laravel = Los cimientos y la estructura (el "esqueleto" de la casa)
Vue = La decoración y muebles (lo que ves y tocas)
Inertia = El "ascensor" que conecta los cimientos con la decoración
Jetstream = Un "kit de inicio" que ya viene con puertas, ventanas y baño instalados
📂 La Estructura de Archivos (Dónde está cada cosa)
📁 resources/
📁 js/ ← ¡Aquí trabajamos con VUE (el frente de la casa)!
📁 Components/ ← Piezas reutilizables (como ladrillos)
📁 Layouts/ ← El diseño general (como el plano de la casa)
📁 Pages/ ← Las páginas completas (habitaciones enteras)
📄 app.js ← El punto de entrada (la puerta principal)
📁 views/ ← Archivos base de Laravel (los cimientos)🧩 ¿Qué va en cada carpeta?
Components/: Botones, tarjetas, menús pequeños que usas en varias páginas
Layouts/: El diseño que se repite (ej: el menú superior que ves en todas las páginas)
Pages/: Páginas completas como "Inicio", "Dashboard", "Perfil"
🎯 Parte 2: El Flujo de Trabajo (Cómo crear algo nuevo)
Paso 1: Piensa qué quieres crear
Ejemplo: Quiero una página que muestre mis tareas pendientes.
Paso 2: Crear la Ruta (El "mapa" de la página)
// 📁 routes/web.php
Route::get('/tareas', [TareaController::class, 'index'])->name('tareas');Traducción: "Cuando alguien vaya a /tareas, que ejecute el método index del TareaController"
Paso 3: Crear el Controlador (El "cerebro")
# Abre tu terminal y escribe:
php artisan make:controller TareaControllerEsto crea un archivo en app/Http/Controllers/TareaController.php
Paso 4: Llenar el Controlador con datos
// 📁 app/Http/Controllers/TareaController.php
public function index()
{
// Obtener las tareas del usuario actual
$tareas = Tarea::where('user_id', auth()->id())->get();
// Enviar los datos a la página Vue
return Inertia::render('Tareas', [
'tareas' => $tareas
]);
}Traducción:
Busca las tareas de este usuario
Envíalas a la página Vue llamada "Tareas"
Paso 5: Crear la Página Vue (Lo que el usuario ve)
Crea un archivo en resources/js/Pages/Tareas.vue
<script setup>
import AppLayout from '@/Layouts/AppLayout.vue'; // El diseño con menú
import { Head } from '@inertiajs/vue3';
// Los datos que vienen del controlador
defineProps({
tareas: Array
});
</script>
<template>
<AppLayout>
<Head title="Mis Tareas" />
<div class="p-6">
<h1 class="text-2xl font-bold">📋 Mis Tareas</h1>
<!-- Mostrar cada tarea -->
<div v-for="tarea in tareas" :key="tarea.id" class="mt-4 p-4 border rounded">
✅ {{ tarea.titulo }}
</div>
</div>
</AppLayout>
</template>🔥 Parte 3: ¡Los Comandos Mágicos!
Para Desarrollo (Mientras programas):
# Terminal 1: ¡El servidor de Laravel!
php artisan serve
# → Abre http://localhost:8000 en tu navegador
# Terminal 2: ¡El compilador automático!
npm run dev
# → Esto vigila tus archivos y los actualiza al instante¿Qué hace npm run dev?
Detecta cuando guardas un archivo
.vueo.jsLo compila automáticamente
Actualiza tu navegador SIN recargar la página (¡magia!)
¿Cuándo usar npm run build?
Solo cuando vayas a subir tu página a Internet (producción)
Para probar cómo quedará tu página comprimida y rápida
Si
npm run devno funciona correctamente
🎨 Parte 4: Componentes Reutilizables (Los Ladrillos)
Crear un Componente
<!-- 📁 resources/js/Components/TareaCard.vue -->
<script setup>
// Definir qué datos necesita este componente
defineProps({
tarea: Object, // Este componente espera recibir una tarea
color: String // Y un color opcional
});
</script>
<template>
<div class="p-4 border rounded-lg" :style="{ backgroundColor: color || 'white' }">
<h3 class="font-bold">{{ tarea.titulo }}</h3>
<p class="text-gray-600">{{ tarea.descripcion }}</p>
<span :class="tarea.estado === 'completada' ? 'text-green-500' : 'text-yellow-500'">
{{ tarea.estado }}
</span>
</div>
</template>Usar el Componente en una Página
<script setup>
import TareaCard from '@/Components/TareaCard.vue';
import AppLayout from '@/Layouts/AppLayout.vue';
defineProps({
tareas: Array
});
</script>
<template>
<AppLayout>
<div class="grid grid-cols-3 gap-4 p-6">
<!-- Usar el componente TareaCard para cada tarea -->
<TareaCard
v-for="tarea in tareas"
:key="tarea.id"
:tarea="tarea"
color="#f0f9ff"
/>
</div>
</AppLayout>
</template>🎯 Parte 5: El Flujo Completo (Ejemplo Práctico)
Vamos a crear una página de tareas desde cero:
1️⃣ Crear la Migración (La tabla en la base de datos)
php artisan make:model Tarea -mEsto crea:
app/Models/Tarea.php(El modelo)database/migrations/...create_tareas_table.php(La tabla)
2️⃣ Definir la estructura de la tabla
// En el archivo de migración
public function up()
{
Schema::create('tareas', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->string('titulo');
$table->text('descripcion')->nullable();
$table->enum('estado', ['pendiente', 'completada'])->default('pendiente');
$table->timestamps();
});
}3️⃣ Ejecutar la migración
php artisan migrate4️⃣ Crear el Controlador
php artisan make:controller TareaController --resource5️⃣ Definir las Rutas
// routes/web.php
Route::middleware(['auth'])->group(function () {
Route::resource('tareas', TareaController::class);
});6️⃣ Crear las Vistas Vue
# Crea estos archivos en resources/js/Pages/Tareas/
touch resources/js/Pages/Tareas/Index.vue
touch resources/js/Pages/Tareas/Create.vue
touch resources/js/Pages/Tareas/Edit.vue💡 Parte 6: Trucos y Atajos para Principiantes
🔥 Atajos en el Navegador
Ctrl + Shift + R (Windows) o Cmd + Shift + R (Mac): Recarga forzada
F12 → Network → Disable cache: Desactiva la caché (útil para desarrollo)
🔧 Comandos Útiles
# Ver todas las rutas disponibles
php artisan route:list
# Crear un controlador con métodos CRUD
php artisan make:controller TareaController --resource
# Crear un modelo con migración y controlador
php artisan make:model Tarea -mcr
# Limpiar la caché
php artisan cache:clear
php artisan config:clear
php artisan view:clear📝 Errores Comunes y Soluciones
| Problema | Solución |
|---|---|
| "No se encuentra el componente" | Reinicia npm run dev |
| Los cambios no se ven | Ctrl+Shift+R (recarga forzada) |
| Error de puerto ocupado | php artisan serve --port=8001 |
| Error de compilación | npm install y luego npm run dev |
🎓 Parte 7: Ejercicio Práctico
Reto: Crea tu primera página completa
Crea la ruta en
routes/web.php:
Route::get('/mi-primera-pagina', function () {
return Inertia::render('MiPrimeraPagina', [
'mensaje' => '¡Hola, mundo!',
'usuario' => auth()->user()
]);
})->name('mi.pagina');Crea la vista en
resources/js/Pages/MiPrimeraPagina.vue:
<script setup>
import AppLayout from '@/Layouts/AppLayout.vue';
import { Head } from '@inertiajs/vue3';
defineProps({
mensaje: String,
usuario: Object
});
</script>
<template>
<AppLayout>
<Head title="Mi Primera Página" />
<div class="p-12 text-center">
<h1 class="text-4xl font-bold text-blue-600">
{{ mensaje }}
</h1>
<p class="mt-4 text-xl">
Bienvenido, {{ usuario?.name || 'Visitante' }}! 🎉
</p>
<div class="mt-8 p-6 bg-yellow-50 rounded-lg">
<p class="text-gray-700">
¡Estás viendo tu primera página con Laravel + Vue!
</p>
</div>
</div>
</AppLayout>
</template>¡Abre tu navegador en
http://localhost:8000/mi-primera-pagina!
✅ Resumen para Principiantes
| Concepto | Explicación Simple |
|---|---|
| Laravel | El "motor" que maneja la lógica y la base de datos |
| Vue | Lo que ves en el navegador (interfaz) |
| Inertia | El "puente" que conecta Laravel y Vue |
| Jetstream | Un proyecto ya empezado con autenticación |
| npm run dev | Comando mágico que actualiza todo automáticamente |
| Pages/ | Páginas completas (cada una es una ruta) |
| Components/ | Piezas pequeñas que usas en varias páginas |
| defineProps | Cómo recibes datos del backend en Vue |
🚀 ¡Próximos Pasos!
Practica: Crea una página con una lista de tareas
Experimenta: Agrega un botón para añadir tareas
Personaliza: Cambia colores y estilos
Comparte: Muestra lo que has creado a alguien
¿Tienes preguntas? Recuerda:
Google es tu amigo
La documentación oficial es tu mejor aliada
Todos los programadores comenzaron donde estás tú
Comentarios
Publicar un comentario