Я нашел решение этой проблемы, я до сих пор не совсем понимаю, как это работает, но у меня это сработало, позвольте мне объяснить:
Когда я имел APP_DEBUG = true в файле .env и использовал функцию рендеринга по умолчанию в классе Handler, он выдавал мне 'Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException'.
Но когда я сделал get_class ($ исключение), чтобы убедиться, что он выбрасывает тот же класс, по какой-то причине он выбрасывал «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, на несуществующий идентификатор пользователя.
//UserController.php
public function show(User $user)
{
return new UserResource($user);
}