我不明白为什么laravel不捕获NotFoundHttpException,但是却捕获所有其他异常。
我想根据异常类型向用户发送自定义json响应,这适用于除NotFoundHttpException以外的所有列出的异常:
from PIL import ImageGrab
pixelRGB = ImageGrab.grab().getpixel((x, y))
当我请求创建NotFoundHttpException时,laravel使用默认的switch case选项进行响应,对此有任何建议吗?
答案 0 :(得分:2)
Laravel的异常处理程序决定如何处理引发异常,默认情况下将忽略ModelNotFoundException。
检查app / Exceptions / Handler.php中的文件,它将扩展Laravel框架中的异常处理程序。
在此处查看文档:{{3}}
答案 1 :(得分:0)
我找到了解决此问题的方法,但我仍然不完全了解它是如何工作的,但是它对我有用,请让我解释一下:
当我在.env文件中具有APP_DEBUG = true并在Handler类中使用默认呈现功能时,它抛出了'Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException'。
但是当我执行get_class($ exception)以确保它抛出相同的类时,由于某种原因,它正在抛出“ Illuminate \ Database \ Eloquent \ ModelNotFoundException”。因此,我只是更改了代码以捕获该异常: 命名空间App \ Exceptions;
use Exception;
use Illuminate\Database\QueryException;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
public function render($request, Exception $exception)
{
switch (true) {
case $exception instanceof QueryException:
return response()->json('QueryException')
case $exception instanceof ModelNotFoundException:
return response()->json('ModelNotFoundException')
case $exception instanceof AuthenticationException:
return response()->json('AuthenticationException')
default:
return response()->json('Different Exception')
}
//return parent::render($request, $exception); //This throws a ModelNotFoundException
}
}
这解决了问题,但我仍然不明白为什么它会以默认方式引发不同的异常。
当我将get请求发送到localhost:8000 / api / users / $ id到不存在的用户ID时,这是引发异常的代码。
//UserController.php
public function show(User $user)
{
return new UserResource($user);
}