es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Laravel 8 Handler clase no definida ‘Exception’

Trabajo en un proyecto de API Laravel y trato de manejar
“message”: “No hay resultados de consulta para el ID del modelo”
y la página 404.

Utilizo esta función pero no envía nada en la API y no afecta a las páginas 404.

namespace App\Exceptions;

use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Throwable;
use Illuminate\Database\Eloquent\ModelNotFoundException;

class Handler extends ExceptionHandler
{

public function render($request, Exception $e)
    {
        // "message": "No hay resultados de consulta para el ID del modelo" en la API
        if ($e instanceof ModelNotFoundException) {
            return response()->json(['error' => 'Datos no encontrados.']);
        }

        if($this->isHttpException($e))
        {
            switch ($e->getStatusCode())
            {
                // no encontrado
                case 404:
                    return redirect()->guest('home');
                    break;

                // error interno
                case '500':
                    return redirect()->guest('home');
                    break;

                default:
                    return $this->renderHttpException($e);
                    break;
            }
        }
        else
        {
            return parent::render($request, $e);
        }
    }
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para manejar el error “message”: “No se encontraron resultados de consulta para el ID del modelo” y la página 404 en un proyecto de API Laravel, puedes usar el siguiente código en tu clase Handler:

    use Illuminate\Database\Eloquent\ModelNotFoundException;
    use Illuminate\Http\JsonResponse;
    use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
    
    class Handler extends ExceptionHandler
    {
        public function render($request, Throwable $exception)
        {
            if ($exception instanceof ModelNotFoundException) {
                return response()->json(['error' => 'Datos no encontrados.'], 404);
            }
    
            return parent::render($request, $exception);
        }
    }
    

    En este código, verificamos si la excepción que se produce es una instancia de ModelNotFoundException, que es la excepción que se produce cuando no se encuentra ningún resultado de consulta para un modelo. Si ese es el caso, devolvemos una respuesta JSON con un mensaje de error y un código de estado 404. Esto será capturado por la API del lado del cliente y se puede manejar en consecuencia.

    Para las páginas 404, Laravel ya tiene una página de error predeterminada que se muestra cuando no se encuentra una página. Sin embargo, si deseas personalizar tu página de error o redireccionar a una página diferente, puedes modificar el caso 404 de la siguiente manera:

    case 404:
        // mostrar página de error personalizada o redirigir
        return response()->view('errors.404', [], 404);
        // o
        return redirect()->route('home');
        break;
    

    Esto mostrará una página de error personalizada o redirigirá a una ruta específica, dependiendo de tus preferencias.

Comments are closed.