HACER CAMBIOS-A TU EJEMPLO
¡Excelente! Ahora que ya ves los cambios, te daré un tutorial completo sobre la estructura y flujo de trabajo con Laravel Jetstream + Inertia + Vue.
📚 Tutorial: Laravel Jetstream con Inertia + Vue
1. Estructura del Proyecto (Parte Frontend)
resources/ ├── js/ │ ├── Components/ # Componentes Vue reutilizables │ │ ├── ApplicationLogo.vue │ │ ├── InputLabel.vue │ │ ├── Modal.vue │ │ ├── NavLink.vue │ │ └── ... │ ├── Layouts/ # Layouts de la aplicación │ │ └── AppLayout.vue # Layout principal (con navbar, sidebar) │ ├── Pages/ # PÁGINAS (rutas principales) │ │ ├── Welcome.vue # Página de inicio (/) │ │ ├── Dashboard.vue # Dashboard después de login │ │ ├── Auth/ # Páginas de autenticación │ │ │ ├── Login.vue │ │ │ ├── Register.vue │ │ │ └── VerifyEmail.vue │ │ └── Profile/ # Perfil de usuario │ │ └── Show.vue │ ├── app.js # Punto de entrada principal │ └── bootstrap.js # Configuración de Inertia ├── views/ │ └── app.blade.php # Layout base (solo renderiza Inertia)
2. Flujo de Trabajo Básico
A. Crear una nueva página
# 1. Crea el componente en Pages/ # resources/js/Pages/Tareas.vue <script setup> import AppLayout from '@/Layouts/AppLayout.vue'; // Usa el layout con navbar import { Head } from '@inertiajs/vue3'; defineProps({ tareas: Array // Datos que vienen del backend }); </script> <template> <AppLayout> <Head title="Mis Tareas" /> <div class="py-12"> <div class="max-w-7xl mx-auto sm:px-6 lg:px-8"> <div class="bg-white overflow-hidden shadow-xl sm:rounded-lg p-6"> <h1 class="text-2xl font-bold">Mis Tareas</h1> <div v-for="tarea in tareas" :key="tarea.id" class="mt-4 p-4 border rounded"> {{ tarea.titulo }} </div> </div> </div> </div> </AppLayout> </template>
B. Conectar con el Backend (Rutas)
// routes/web.php use App\Http\Controllers\TareaController; use Illuminate\Support\Facades\Route; Route::middleware(['auth:sanctum', 'verified'])->group(function () { Route::get('/dashboard', function () { return Inertia::render('Dashboard'); })->name('dashboard'); // Nueva ruta para tareas Route::get('/tareas', [TareaController::class, 'index'])->name('tareas'); });
Comando para crear el controlador
php artisan make:controller TareaController
php artisan make:controller TareaController
C. Controlador que pasa datos
// app/Http/Controllers/TareaController.php namespace App\Http\Controllers; use Inertia\Inertia; use App\Models\Tarea; class TareaController extends Controller { public function index() { return Inertia::render('Tareas', [ 'tareas' => Tarea::where('user_id', auth()->id())->get() ]); } }
3. 🚀 Flujo de Desarrollo (Los 3 Pasos Mágicos)
Paso 1: Iniciar los servidores
# Terminal 1 - Laravel (Backend) php artisan serve # → http://localhost:8000 # Terminal 2 - Vite (Frontend compilación automática) npm run dev # → Escucha cambios en tiempo real
Paso 2: Modificar archivos
Edita archivos
.vueo.phpGuarda los cambios
Paso 3: Ver resultados
Con
npm run dev, Vite detecta cambios automáticamenteLos cambios aparecen casi instantáneamente al refrescar el navegador
No necesitas recompilar manualmente
4. ⚡ Flujo de Cambios Automáticos (Sin recompilar)
Con Vite + npm run dev:
✅ Los cambios en
.vuese actualizan instantáneamente (Hot Module Replacement)✅ Los cambios en
.phpsolo requieren refrescar el navegador✅ No necesitas ejecutar
npm run builden desarrollo
Para cambios automáticos sin compilar:
# SOLO ESTO ES SUFICIENTE npm run dev
¿Cuándo usar npm run build?
Solo en producción
Para probar el sitio compilado localmente
Cuando
npm run devno funciona correctamente
5. 🎨 Creación Rápida de Componentes
# Crear un componente reutilizable # resources/js/Components/TareaCard.vue <script setup> defineProps({ tarea: Object }); </script> <template> <div class="p-4 border rounded-lg hover:shadow-lg transition"> <h3 class="font-bold">{{ tarea.titulo }}</h3> <p class="text-gray-600">{{ tarea.descripcion }}</p> <span :class="{ 'text-green-600': tarea.estado === 'completada', 'text-yellow-600': tarea.estado === 'pendiente' }"> {{ tarea.estado }} </span> </div> </template>
Usarlo en cualquier página:
<script setup> import TareaCard from '@/Components/TareaCard.vue'; </script> <template> <div class="grid grid-cols-3 gap-4"> <TareaCard v-for="tarea in tareas" :key="tarea.id" :tarea="tarea" /> </div> </template>
6. 📊 Navegación y Layouts
AppLayout (Con navbar y sidebar)
<!-- resources/js/Layouts/AppLayout.vue --> <script setup> import { Link } from '@inertiajs/vue3'; </script> <template> <div> <!-- Navbar --> <nav class="bg-white border-b"> <div class="max-w-7xl mx-auto px-4"> <div class="flex justify-between h-16"> <Link :href="route('dashboard')" class="flex items-center"> <ApplicationLogo class="h-8" /> <span class="ml-2 font-bold">Mi App</span> </Link> <div class="flex items-center"> <Link :href="route('tareas')" class="mr-4">Tareas</Link> <Link :href="route('profile.show')">Perfil</Link> </div> </div> </div> </nav> <!-- Contenido --> <main> <slot /> </main> </div> </template>
7. 🔥 Trucos para Desarrollo Rápido
A. Variables de entorno para desarrollo
# .env APP_DEBUG=true APP_ENV=local
B. Vite con HMR (Hot Module Replacement)
# Esto actualiza los componentes sin recargar la página completa npm run dev # Verás en consola: # VITE v4.x.x ready in 320ms # ➜ Local: http://localhost:5173/ # ➜ Network: use --host to expose
C. Atajos en el navegador
Ctrl+Shift+R(Windows) oCmd+Shift+R(Mac): Recarga forzadaF12→ Network → Disable cache: Desactiva caché para desarrollo
8. 📝 Comandos Útiles
# Desarrollo php artisan serve # Servidor Laravel npm run dev # Compilador Vite (automático) # Producción npm run build # Compilar assets para producción php artisan config:cache # Optimizar configuración # Utilidades php artisan make:controller TareaController php artisan make:model Tarea -m # Modelo con migración php artisan make:seeder TareaSeeder # Ver rutas disponibles php artisan route:list
9. 🎯 Flujo de Trabajo Recomendado
Define la ruta en
routes/web.phpCrea el controlador con
php artisan make:controllerCrea la vista Vue en
resources/js/Pages/Conecta en el controlador:
return Inertia::render('NombreVista', $data)npm run dev(si no está corriendo)¡Los cambios se ven en tiempo real!
10. 📂 Crear tu Primera Vista con Datos
Backend:
// routes/web.php Route::get('/tareas', function () { return Inertia::render('Tareas', [ 'usuario' => auth()->user(), 'tareas' => [ ['id' => 1, 'titulo' => 'Aprender Laravel', 'estado' => 'pendiente'], ['id' => 2, 'titulo' => 'Aprender Vue', 'estado' => 'completada'], ] ]); })->name('tareas');
Frontend:
<!-- resources/js/Pages/Tareas.vue --> <script setup> import AppLayout from '@/Layouts/AppLayout.vue'; import { Head } from '@inertiajs/vue3'; defineProps({ usuario: Object, tareas: Array }); </script> <template> <AppLayout> <Head title="Mis Tareas" /> <div class="py-12"> <div class="max-w-7xl mx-auto px-4"> <h1 class="text-3xl font-bold mb-8"> Hola, {{ usuario.name }} 👋 </h1> <div class="grid gap-4"> <div v-for="tarea in tareas" :key="tarea.id" class="p-4 bg-white rounded shadow"> <span :class="tarea.estado === 'completada' ? 'line-through' : ''"> {{ tarea.titulo }} </span> </div> </div> </div> </div> </AppLayout> </template>
✅ Resumen
npm run deves suficiente para desarrolloLos cambios se ven automáticamente sin recompilar
Pages/ son rutas principales, Components/ son reutilizables
AppLayout da el diseño con navbar
Usa props para pasar datos del backend
@inertiajs/vue3 maneja la navegación
¿Listo para empezar a construir tu app? ¿Qué te gustaría crear primero?
Comentarios
Publicar un comentario