3-Mostrar un arreglo de tareas con vistas

 

Mostrar un arreglo de tareas con vistas y debugging

Este tutorial te guía paso a paso para crear una pequeña aplicación en Laravel que solo muestra una lista de tareas desde un arreglo en memoria. No incluye formulario para agregar, solo la visualización, y además incorpora técnicas de depuración con dump() y dd() para que veas qué ocurre internamente.


1. Estructura del proyecto

Crearemos:

  • Una ruta GET para acceder a la lista.

  • Un controlador con un arreglo estático de tareas.

  • Una vista Blade que renderiza la lista.

  • Puntos de debugging para inspeccionar los datos.


2. Definir la ruta (routes/web.php)

Abre el archivo routes/web.php y agrega la siguiente ruta:

php

<?php


use App\Http\Controllers\TareaController;

use Illuminate\Support\Facades\Route;


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

  • GET /tareas: Cuando el usuario visite esa URL, se ejecutará el método index del TareaController.

  • name('tareas.index'): Asigna un nombre a la ruta para usarla en las vistas o redirecciones (aunque en este ejemplo solo la usaremos para mostrar).


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

Genera el controlador con el comando Artisan:

bash

php artisan make:controller TareaController

Luego, edita el archivo con el siguiente contenido:

php

<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;


class TareaController extends Controller

{

    // Arreglo estático de ejemplo (simula datos)

    private $tareas = [

        ['id' => 1, 'nombre' => 'Comprar pan'],

        ['id' => 2, 'nombre' => 'Estudiar Laravel'],

        ['id' => 3, 'nombre' => 'Hacer ejercicio'],

    ];


    public function index()

    {

        // Debug: mostramos el contenido del arreglo antes de enviarlo a la vista

        dump($this->tareas);   // Muestra en la barra de depuración (o en la página)


        // También podemos usar dd() si queremos detener la ejecución para inspeccionar

        // dd($this->tareas);   // Descomenta para probar


        return view('tareas.index', ['tareas' => $this->tareas]);

    }

}

Explicación del controlador:

  • private $tareas: Es un arreglo fijo que simula una base de datos. En una aplicación real, aquí vendrían los datos desde un modelo.

  • index(): Prepara los datos y los pasa a la vista.

  • dump($this->tareas): Muestra el contenido del arreglo en la salida (útil para verificar que los datos existen). No detiene la ejecución.

  • dd($this->tareas): Si se descomenta, muestra el arreglo y detiene la ejecución, ideal para depurar en un punto crítico.


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

Crea la carpeta tareas dentro de resources/views y dentro de ella el archivo index.blade.php:

html

<!DOCTYPE html>

<html lang="es">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Lista de Tareas</title>

    <style>

        body { font-family: Arial, sans-serif; margin: 20px; }

        .debug-box { background: #f4f4f4; padding: 10px; border-left: 4px solid #007bff; margin-bottom: 20px; }

        ul { list-style: none; padding: 0; }

        li { background: #e9ecef; margin: 5px 0; padding: 8px; border-radius: 4px; }

    </style>

</head>

<body>

    <h1>📋 Mis Tareas</h1>


    <!-- Caja de depuración en la vista -->

    <div class="debug-box">

        <strong>🔍 Debug: Contenido de la variable $tareas</strong>

        @dump($tareas)   <!-- Muestra el contenido de $tareas en la vista -->

    </div>


    <!-- Lista de tareas -->

    @if(count($tareas) > 0)

        <ul>

            @foreach($tareas as $tarea)

                <li>

                    <strong>ID:</strong> {{ $tarea['id'] }} - 

                    <strong>Nombre:</strong> {{ $tarea['nombre'] }}

                </li>

            @endforeach

        </ul>

    @else

        <p>No hay tareas para mostrar.</p>

    @endif


    <p><small>Datos estáticos (se pierden al reiniciar el servidor).</small></p>

</body>

</html>

Explicación de la vista:

  • @dump($tareas): Muestra el contenido de la variable en un formato legible, directamente en la página. Es súper útil para ver qué datos está recibiendo la vista.

  • @foreach recorre el arreglo y muestra cada tarea.

  • Se usa {{ }} para escapar la salida y evitar inyección XSS.


5. Probar la aplicación

Inicia el servidor de desarrollo:

php artisan serve

Ahora abre tu navegador en: http://localhost:8000/tareas

Verás:

  • La lista de tareas con sus IDs y nombres.

  • Un bloque de depuración que muestra el arreglo completo (gracias a @dump en la vista).

  • En la parte superior (si estás en modo de depuración), también verás la salida de dump($this->tareas) del controlador.


6. Flujo de trabajo explicado

  1. El usuario hace una petición GET a /tareas.

  2. Laravel busca la ruta definida en web.php y ejecuta el método index del TareaController.

  3. El controlador tiene un arreglo $tareas con datos de ejemplo.

  4. Se ejecuta dump($this->tareas) que muestra el arreglo en la barra de depuración (no detiene la ejecución).

  5. El controlador retorna la vista tareas.index pasándole el arreglo.

  6. La vista recibe $tareas, y con @dump($tareas) lo muestra en el HTML para inspección visual.

  7. Finalmente, la vista renderiza la lista de tareas.


7. ¿Qué pasa si usamos dd() en lugar de dump()?

Si en el controlador cambias dump($this->tareas) por dd($this->tareas), la ejecución se detiene y solo verás el contenido del arreglo, sin llegar a la vista. Esto es útil cuando quieres verificar que los datos existen antes de que ocurra cualquier otro procesamiento.

Puedes probar cambiando esa línea y recargando la página para ver el efecto.


8. Notas importantes

  • Datos en memoria: El arreglo se define dentro del controlador. Cada vez que se ejecuta el método index, se crea el arreglo desde cero. Si modificaramos el arreglo (por ejemplo, agregando una tarea), los cambios no se persistirían porque no hay una base de datos.

  • Para aplicaciones reales: En lugar de un arreglo estático, usarías un modelo de Eloquent para obtener datos desde la base de datos.

  • Depuración en producción: dump() y dd() solo deben usarse en entornos de desarrollo. En producción, asegúrate de que APP_DEBUG=false en tu archivo .env.


9. Ampliación: Mostrar también en consola

Si prefieres ver la información en la consola (cuando ejecutas pruebas o comandos), puedes usar logger() o info():

php

logger('Tareas:', $this->tareas);

Esto escribirá en el archivo de logs (storage/logs/laravel.log).


10. Resumen del código final

Ruta (routes/web.php):

php

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

Controlador (app/Http/Controllers/TareaController.php):

php

<?php


namespace App\Http\Controllers;


class TareaController extends Controller

{

    private $tareas = [

        ['id' => 1, 'nombre' => 'Comprar pan'],

        ['id' => 2, 'nombre' => 'Estudiar Laravel'],

        ['id' => 3, 'nombre' => 'Hacer ejercicio'],

    ];


    public function index()

    {

        dump($this->tareas);  // Depuración en el controlador

        return view('tareas.index', ['tareas' => $this->tareas]);

    }

}

Vista (resources/views/tareas/index.blade.php):

html

<!DOCTYPE html>

<html>

<head>

    <title>Lista de Tareas</title>

</head>

<body>

    <h1>Mis Tareas</h1>

    @dump($tareas)  <!-- Depuración en la vista -->

    <ul>

        @foreach($tareas as $tarea)

            <li>{{ $tarea['id'] }} - {{ $tarea['nombre'] }}</li>

        @endforeach

    </ul>

</body>

</html>


Conclusión

Has creado un ejemplo funcional que muestra un arreglo de tareas en una vista, con puntos de depuración para entender mejor el flujo de datos. Este es el primer paso para construir aplicaciones más complejas, donde los datos vendrán de la base de datos y se podrán agregar, editar o eliminar.

¡Sigue practicando! Prueba a modificar el arreglo, agregar más campos o cambiar el estilo de la vista. Cuando te sientas cómodo, avanza al siguiente nivel: conectar con una base de datos usando Eloquent.


Comentarios

Entradas más populares de este blog

02 -Rutas en Laravel

01-04-convencion nombres

3-Rutas