Saltar a contenido

Manejar Excepciones

Estamos ante otro de los grandes cambios de Laravel 11, y es que con respecto versiones anteriores, se han fusionado muchos ficheros en bootstrap\app.php. Para manejar las excepciones, debemos siempre de capturarla y devolver una vista o un JSON.

Es por esto, que debemos hacer uso de la función render() de la clase Exceptions. El problema es que debemos saber si viene de la API o no, para lo que necesitamos hacer uso de $request. Gracias a $request podemos saber si esperamos un JSON o no.

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        $exceptions->render(function(NotFoundHttpException $e, $request){
            if($request->expectsJson()){
                return response()->json('Not found',404);
            }
        });
    })->create();

De este modo, si hay una excepción del tipo NotFoundHttpException, y se espera un JSON, devolverá un JSON con el mensaje Not Found y un 404 en lugar del error. Si no lo espera, el sistema lo gestionará dando el 404 habitual.

Siguiendo estas pautas, estaremos construyendo una API robusta y sobre las que tendremos control en cualquier momento de lo que pasa.

Actividades

  • 📝 AC 813. (RA7 / CE7e CE7f CE7g CE7h / IC1 / 3p) - Adapta el proyecto de la lista de tareas al manejo de excepciones. Documéntalo.

  • 🧪 PR 814. (RA7 / CE7e CE7f CE7g CE7h / IC2 / 5p) - Ya que las pruebas han ido bien, tu CTO te solicita que lo prepares todo para el manejo de excepciones. También te pide que lo documentes.

  • 🏹 RE 815. (RA7 / CE7a CE7b CE7c CE7d CE7e CE7f CE7g CE7h / IC2 / 10p) - Esta fase se desarrolla la lógica principal de la API. El objetivo es ampliar las funcionalidades básicas del sistema, integrando métodos personalizados y mejorando el control de errores.

    Durante el desarrollo se deben tener en cuenta los siguientes aspectos:

    • Se ha implementado al menos un método personalizado, como por ejemplo: obtener todas las publicaciones de un usuario específico o listar los comentarios de una publicación.
    • Se han incorporado mecanismos para el manejo de excepciones con try/catch, y se devuelven respuestas claras y adecuadas a cada situación.
    • Se utilizan códigos de estado HTTP correctos para indicar el resultado de cada operación (200, 201, 404, 500, etc.).
    • Todos los endpoints desarrollados deben ser probados mediante Postman, y se recomienda documentar estos ensayos.
    • El proyecto mantiene una estructura clara y organizada, favoreciendo la reutilización del código y la colaboración entre los miembros de la pareja.

    Esta etapa consolida la funcionalidad del proyecto y representa el tramo más crítico del reto, en el que se demuestra el dominio técnico sobre Laravel y las buenas prácticas de diseño de APIs.