2-CRUD de Tareas en Laravel (Sencillo con Rutas Normales)-rutas
CRUD de Tareas en Laravel (Sencillo con Rutas Normales)
Manteniendo la simplicidad de tu ejemplo original pero usando rutas normales en lugar de resource, aquí tienes la versión modificada:
1. Configuración inicial (igual)
composer create-project laravel/laravel task-crud
cd task-crud2. Base de datos
.env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_tasks
DB_USERNAME=root
DB_PASSWORD=3. Migración y Modelo (igual)
php artisan make:model Task -mdatabase/migrations/xxxx_create_tasks_table.php:
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}php artisan migrate4. Modelo Task (igual)
app/Models/Task.php:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
use HasFactory;
protected $fillable = ['name'];
}5. Controlador modificado para rutas normales
php artisan make:controller TaskController
app/Http/Controllers/TaskController.php:
<?php
namespace App\Http\Controllers;
use App\Models\Task;
use Illuminate\Http\Request;
class TaskController extends Controller
{
public function index()
{
$tasks = Task::latest()->get();
return view('tasks.index', compact('tasks'));
}
public function create()
{
return view('tasks.create');
}
public function store(Request $request)
{
$request->validate([
'name' => 'required|max:255',
]);
Task::create($request->all());
return redirect('/tareas')
->with('success', 'Tarea creada correctamente');
}
public function edit($id)
{
$task = Task::findOrFail($id);
return view('tasks.edit', compact('task'));
}
public function update(Request $request, $id)
{
$request->validate([
'name' => 'required|max:255',
]);
$task = Task::findOrFail($id);
$task->update($request->all());
return redirect('/tareas')
->with('success', 'Tarea actualizada correctamente');
}
public function destroy($id)
{
$task = Task::findOrFail($id);
$task->delete();
return redirect('/tareas')
->with('success', 'Tarea eliminada correctamente');
}
}6. Vistas modificadas
Estructura de directorios:
resources/views/
├── layouts/
│ └── app.blade.php
└── tasks/
├── index.blade.php
├── create.blade.php
└── edit.blade.phpresources/views/tasks/index.blade.php:
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Lista de Tareas</h1>
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<a href="{{ route('tareas.create') }}" class="btn btn-primary mb-3">Nueva Tarea</a><a href="{{ url('/tareas/crear') }}" class="btn btn-primary mb-3">Nueva Tarea</a>
<a href="/tareas/crear" class="btn btn-primary mb-3">Nueva Tarea</a>
@if($tasks->isEmpty())
<div class="alert alert-info">No hay tareas registradas</div>
@else
<ul class="list-group">
@foreach($tasks as $task)
<li class="list-group-item d-flex justify-content-between align-items-center">
{{ $task->name }}
<div>
<a href="/tareas/editar/{{ $task->id }}" class="btn btn-sm btn-success me-1">Editar</a>
<form action="/tareas/eliminar/{{ $task->id }}" method="POST" class="d-inline">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger"
onclick="return confirm('¿Eliminar esta tarea?')">Eliminar</button>
</form>
</div>
</li>
@endforeach
</ul>
@endif
</div>
@endsectionresources/views/tasks/create.blade.php:
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Crear Nueva Tarea</h1>
<form action="/tareas" method="POST">
@csrf
<div class="mb-3">
<label for="name" class="form-label">Nombre de la tarea</label>
<input type="text" name="name" class="form-control" required>
</div>
<button type="submit" class="btn btn-primary">Guardar</button>
<a href="/tareas" class="btn btn-secondary">Cancelar</a>
</form>
</div>
@endsectionresources/views/tasks/edit.blade.php:
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Editar Tarea</h1>
<form action="/tareas/actualizar/{{ $task->id }}" method="POST">
@csrf
@method('PUT')
<div class="mb-3">
<label for="name" class="form-label">Nombre de la tarea</label>
<input type="text" name="name" class="form-control" value="{{ $task->name }}" required>
</div>
<button type="submit" class="btn btn-primary">Actualizar</button>
<a href="/tareas" class="btn btn-secondary">Cancelar</a>
</form>
</div>
@endsection7. Rutas normales
routes/web.php:
<?php
use App\Http\Controllers\TaskController;
use Illuminate\Support\Facades\Route;
// Página principal redirige a tareas
Route::redirect('/', '/tareas');
// Rutas para tareas
Route::get('/tareas', [TaskController::class, 'index'])->name('tareas.index');
Route::get('/tareas/crear', [TaskController::class, 'create'])->name('tareas.create');
Route::post('/tareas', [TaskController::class, 'store'])->name('tareas.store');
Route::get('/tareas/editar/{id}', [TaskController::class, 'edit'])->name('tareas.edit');
Route::put('/tareas/actualizar/{id}', [TaskController::class, 'update'])->name('tareas.update');
Route::delete('/tareas/eliminar/{id}', [TaskController::class, 'destroy'])->name('tareas.destroy');8. Layout (igual que tu ejemplo original)
resources/views/layouts/app.blade.php:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CRUD de Tareas</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
@yield('content')
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>9. Ejecutar la aplicación
php artisan serveCaracterísticas de esta versión:
Mantiene la simplicidad del ejemplo original
Rutas normales en lugar de resource
Estructura clásica de CRUD:
Listado (index)
Formulario de creación (create)
Formulario de edición (edit)
Métodos HTTP claros (GET, POST, PUT, DELETE)
Mensajes de confirmación
Validación básica
Diseño simple con Bootstrap
Ahora puedes acceder a:
http://localhost:8000/tareas (Listado)
http://localhost:8000/tareas/crear (Formulario de creación)
http://localhost:8000/tareas/editar/1 (Formulario de edición)
Comentarios
Publicar un comentario