# Guía Rápida: Aplicación Laravel con Breeze y CRUD Básico ## 1. Instalación de Laravel ```bash cd /var/www/html/ sudo composer create-project laravel/laravel NOMBRE_APP sudo chmod -Rf 777 NOMBRE_APP ``` ## 2. Instalación de Laravel Breeze ```bash nvm install v20.9.0 #instalar node en la ultima version estable composer require laravel/breeze --dev php artisan breeze:install npm install npm run dev ``` ## 3. Crear y Configuración de la Base de Datos Crear la base de datos en http://localhost/phpmyadmin/ Editar .env y configurar las opciones de la base de datos: ```env DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=nombre_base_datos DB_USERNAME=usuario DB_PASSWORD=contraseña ``` Donde Modelo es el nombre de tu modelo. ```bash php artisan migrate ``` ## 5. Crear Modelo, Controlador, Factory, y Migración para CRUD ```bash php artisan make:model -mrcf Modelo #Donde Modelo es el nombre de tu modelo. ``` ## 6. Definir la Migración Editar el archivo de migración en database/migrations para añadir campos necesarios. ```php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateIncidenciasTable extends Migration { public function up() { Schema::create('incidencias', function (Blueprint $table) { $table->id(); $table->string('nombre'); $table->string('reparador'); $table->string('lugar'); $table->date('fecha_reparacion')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('incidencias'); } } ``` ## 7. Definir el Modelo Editar el modelo en app/Models para añadir propiedades $fillable o $guarded. Recuerda que los campos deben coincidir con migration, factory etc.. ```php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Incidencia extends Model { use HasFactory; protected $fillable = ['nombre', 'reparador', 'lugar', 'fecha_reparacion']; } ``` ## 8. Crear Factory Cuando creamos el Modelo con -mcf debio crearse un archivo [NOMBRE]Factory.php en database/factories. Si no se creó lo creamos con "php artisan make:factory [NOMBRE]Factory --model=[NOMBRE] ```php namespace Database\Factories; use App\Models\Incidencia; use Illuminate\Database\Eloquent\Factories\Factory; class IncidenciaFactory extends Factory { protected $model = Incidencia::class; public function definition() { return [ 'nombre' => $this->faker->word, 'reparador' => $this->faker->name, 'lugar' => $this->faker->address, 'fecha_reparacion' => $this->faker->date, ]; } } ``` ## 9. Crear Seeder Para llenar tu base de datos con datos de prueba para el modelo [NOMBRE], crea un Seeder: ```php php artisan make:seeder [NOMBRE]TableSeeder ``` Esto creará un archivo [NOMBRE]TableSeeder.php en database/seeders. Edita este archivo para usar el Factory: ```php namespace Database\Seeders; use App\Models\Incidencia; use Illuminate\Database\Seeder; class [NOMBRE]TableSeeder extends Seeder { public function run() { [NOMBRE]::factory()->count(50)->create(); } } ``` ## 10. Definir Rutas Editar routes/web.php para definir las rutas del CRUD. ```php use App\Http\Controllers\NombreController; //Esto que viene ahora valdria igual que poner todas las rutas del CRUD Route::resource('incidencias', IncidenciaController::class); // Rutas CRUD para 'Incidencias' /*Route::get('/incidencias', [IncidenciaController::class, 'index'])->name('incidencias.index'); Route::get('/incidencias/create', [IncidenciaController::class, 'create'])->name('incidencias.create'); Route::post('/incidencias', [IncidenciaController::class, 'store'])->name('incidencias.store'); Route::get('/incidencias/{incidencia}', [IncidenciaController::class, 'show'])->name('incidencias.show'); Route::get('/incidencias/{incidencia}/edit', [IncidenciaController::class, 'edit'])->name('incidencias.edit'); Route::put('/incidencias/{incidencia}', [IncidenciaController::class, 'update'])->name('incidencias.update'); Route::delete('/incidencias/{incidencia}', [IncidenciaController::class, 'destroy'])->name('incidencias.destroy');*/ ``` ## 11. Implementar Métodos en el Controlador Editar el controlador en app/Http/Controllers para implementar los métodos del CRUD. ```php namespace App\Http\Controllers; use App\Models\Incidencia; use Illuminate\Http\Request; class IncidenciaController extends Controller { // Muestra la lista de incidencias public function index() { $incidencias = Incidencia::all(); return view('incidencias.index', compact('incidencias')); } // Muestra el formulario para crear una nueva incidencia public function create() { return view('incidencias.create'); } // Guarda una nueva incidencia en la base de datos public function store(Request $request) { $validatedData = $request->validate([ 'nombre' => 'required|string|max:255', 'reparador' => 'required|string|max:255', 'lugar' => 'required|string|max:255', 'fecha_reparacion' => 'nullable|date', ]); Incidencia::create($validatedData); return redirect()->route('incidencias.index')->with('success', 'Incidencia creada con éxito.'); } // Muestra una incidencia específica public function show(Incidencia $incidencia) { return view('incidencias.show', compact('incidencia')); } // Muestra el formulario para editar una incidencia existente public function edit(Incidencia $incidencia) { return view('incidencias.edit', compact('incidencia')); } // Actualiza una incidencia específica en la base de datos public function update(Request $request, Incidencia $incidencia) { $validatedData = $request->validate([ 'nombre' => 'required|string|max:255', 'reparador' => 'required|string|max:255', 'lugar' => 'required|string|max:255', 'fecha_reparacion' => 'nullable|date', ]); $incidencia->update($validatedData); return redirect()->route('incidencias.index')->with('success', 'Incidencia actualizada con éxito.'); } // Elimina una incidencia específica de la base de datos public function destroy(Incidencia $incidencia) { $incidencia->delete(); return redirect()->route('incidencias.index')->with('success', 'Incidencia eliminada con éxito.'); } } ``` ## 12. Creamos las 4 vistas necesarias INDEX, CREATE, EDIT Y SHOW (todas .blade.php) Creamos el directorio layout y dentro la vista [NOMBRE].blade.php ```blade @extends('layouts.incidencia') @section('content') [AQUI LO NECESARIO EN CADA VISTA] @endsection ``` ## Problema con $slots. Si no funciona simplemente quitamos los {{}} y lo sustituimos por un @yield('content')