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)

text
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

bash
# 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)

php
// 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

bash
php artisan make:controller TareaController

C. Controlador que pasa datos

php
// 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

bash
# 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 .vue o .php

  • Guarda los cambios

Paso 3: Ver resultados

  • Con npm run dev, Vite detecta cambios automáticamente

  • Los 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 .vue se actualizan instantáneamente (Hot Module Replacement)

  • ✅ Los cambios en .php solo requieren refrescar el navegador

  • ✅ No necesitas ejecutar npm run build en desarrollo

Para cambios automáticos sin compilar:

bash
# 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 dev no funciona correctamente

5. 🎨 Creación Rápida de Componentes

bash
# 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:

vue
<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)

vue
<!-- 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
# .env
APP_DEBUG=true
APP_ENV=local

B. Vite con HMR (Hot Module Replacement)

bash
# 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) o Cmd+Shift+R (Mac): Recarga forzada

  • F12 → Network → Disable cache: Desactiva caché para desarrollo

8. 📝 Comandos Útiles

bash
# 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

  1. Define la ruta en routes/web.php

  2. Crea el controlador con php artisan make:controller

  3. Crea la vista Vue en resources/js/Pages/

  4. Conecta en el controlador: return Inertia::render('NombreVista', $data)

  5. npm run dev (si no está corriendo)

  6. ¡Los cambios se ven en tiempo real!

10. 📂 Crear tu Primera Vista con Datos

Backend:

php
// 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:

vue
<!-- 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 dev es suficiente para desarrollo

  • Los 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

Entradas más populares de este blog

Tareas con Laravel + Inertia + Jetstream

HACER CAMBIOS-AL EJEMPLO POR DEFECTO

Laravel + Inertia - ejemplo