3-2-Ejemplo Básico (Rutas, Controlador y Vista)

Ejemplo Básico (Rutas, Controlador y Vista)

Laravel sigue el patrón MVC (Modelo-Vista-Controlador). Aquí te muestro un ejemplo sencillo de cómo crear una pequeña aplicación para guardar tareas en un arreglo.

1. Configurar la ruta (routes/web.php)

php
<?php

use App\Http\Controllers\TareaController;
use Illuminate\Support\Facades\Route;

Route::get('/tareas', [TareaController::class, 'index'])->name('tareas.index');
Route::post('/tareas', [TareaController::class, 'store'])->name('tareas.store');

2. Crear el controlador (app/Http/Controllers/TareaController.php)

php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TareaController extends Controller
{
    private $tareas = []; // Arreglo para almacenar las tareas

    public function index()
    {
        return view('tareas', ['tareas' => $this->tareas]);
    }

    public function store(Request $request)
    {
        $nuevaTarea = $request->input('nombre');
        $this->tareas[] = $nuevaTarea;
        
        return redirect()->route('tareas.index');
    }
}

3. Crear la vista (resources/views/tareas.blade.php)

html
<!DOCTYPE html>
<html>
<head>
    <title>Lista de Tareas</title>
</head>
<body>
    <h1>Mis Tareas</h1>
    
    <form method="POST" action="{{ route('tareas.store') }}">
        @csrf
        <input type="text" name="nombre" placeholder="Nueva tarea" required>
        <button type="submit">Agregar</button>
    </form>

    <ul>
        @foreach($tareas as $tarea)
            <li>{{ $tarea }}</li>
        @endforeach
    </ul>
</body>
</html>

Explicación del flujo:

  1. Rutas: Definen los puntos de entrada a la aplicación.

    • GET /tareas: Muestra el formulario y la lista

    • POST /tareas: Procesa el formulario

  2. Controlador:

    • index(): Prepara los datos para la vista

    • store(): Recibe los datos del formulario y los guarda

  3. Vista:

    • Muestra el formulario con protección CSRF

    • Muestra la lista de tareas usando Blade

Nota importante:

Este ejemplo usa un arreglo en memoria, por lo que las tareas se perderán al refrescar la página. En una aplicación real usarías una base de datos.

Ejemplo con Debugging usando dd() o dump()

Voy a mejorar el ejemplo anterior añadiendo funciones de debugging para verificar que los datos del formulario están llegando correctamente al controlador. Usaremos dd() (dump and die) y dump().

Controlador Actualizado (TareaController.php)

php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TareaController extends Controller
{
    private $tareas = [];

    public function index()
    {
        // Debug: Verificar contenido del arreglo antes de enviar a la vista
        dump($this->tareas);
        
        return view('tareas', ['tareas' => $this->tareas]);
    }

    public function store(Request $request)
    {
        // Debug 1: Ver todo el request
        dump($request->all());
        
        // Debug 2: Ver solo el campo 'nombre'
        dump('Nombre recibido:', $request->input('nombre'));
        
        $nuevaTarea = $request->input('nombre');
        
        // Validación básica
        if(empty($nuevaTarea)) {
            dd('Error: El nombre de la tarea no puede estar vacío');
        }
        
        $this->tareas[] = $nuevaTarea;
        
        // Debug 3: Ver el arreglo después de agregar
        dump('Tareas después de agregar:', $this->tareas);
        
        return redirect()->route('tareas.index');
    }
}

Vista Actualizada (tareas.blade.php)

html
<!DOCTYPE html>
<html>
<head>
    <title>Lista de Tareas - Debug</title>
    <style>
        .debug-info {
            background: #f0f0f0;
            padding: 10px;
            margin: 10px 0;
            border-left: 4px solid #ccc;
        }
    </style>
</head>
<body>
    <h1>Mis Tareas</h1>
    
    <div class="debug-info">
        <h3>Debug: Información del formulario</h3>
        @dump($errors ?? null)
    </div>
    
    <form method="POST" action="{{ route('tareas.store') }}">
        @csrf
        <input type="text" name="nombre" placeholder="Nueva tarea" required>
        <button type="submit">Agregar</button>
    </form>

    <h2>Lista de Tareas:</h2>
    @if(count($tareas) > 0)
        <ul>
            @foreach($tareas as $index => $tarea)
                <li>Tarea #{{ $index + 1 }}: {{ $tarea }}</li>
            @endforeach
        </ul>
    @else
        <p>No hay tareas aún.</p>
    @endif
</body>
</html>

¿Qué hace cada función de debugging?

  1. dump(): Muestra información pero permite que la ejecución continúe

    • Útil para ver múltiples valores en secuencia

    • Se muestra en la barra de debug de Laravel o en la página

  2. dd(): Muestra información y detiene la ejecución (dump and die)

    • Perfecto para debugging profundo en un punto específico

    • Útil para validar datos o encontrar errores

  3. @dump() en Blade: Muestra variables directamente en la vista

    • Excelente para ver el contenido de variables en el frontend

Flujo de debugging recomendado:

  1. Primero verifica si el request llega al controlador con dump($request->all())

  2. Luego verifica datos específicos con dump($request->input('nombre'))

  3. Usa dd() cuando encuentres un problema crítico que detenga la ejecución

  4. En la vista, usa @dump() para ver el estado de las variables

Mejora adicional: Validación

Puedes añadir validación más robusta:

php
public function store(Request $request)
{
    $request->validate([
        'nombre' => 'required|min:3|max:100'
    ]);
    
    // El resto del código...
}

Comentarios

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas