Laravel 5.7 ModelNotFoundException не возвращает JSON для вызовов API - PullRequest
1 голос
/ 07 июня 2019

Я хочу вернуть ответ json, когда выполняется вызов API для маршрута API Laravel 5.7, когда модель не найдена. Для этого я изменил render() метод app\Exceptions\Handler.php следующим образом

public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException && $request->wantsJson()) {
            return response()->json(['message' => 'Not Found!'], 404);
        }

        return parent::render($request, $exception);
    }

и мой контроллер show() использует модель Book, подобную этой

public function show(Book $book)
    {
        return new BookResource($book->load('ratings'));
    }

Тест на почтальоне, вызов get для localhost:8000/api/books/1 (идентификатор 1 был удален) продолжает возвращать страницу по умолчанию laravel 404 not found вместо json.

Я пропустил шаг или что-то? Я также заметил, что добавление условного оператора в методе контроллера show() выглядит следующим образом

public function show(Book $book)
    {
        if ($book) {
            return new BookResource($book->load('ratings'));
        } else {
            return response()->json(['message' => 'Not found'], 404);
        }
    }

возвращает тот же результат html вместо json.

Каким будет правильный способ справиться с этим сценарием?

Ответы [ 2 ]

0 голосов
/ 07 июня 2019

май, это может вам помочь:

    public function render($request, Exception $exception)
    {
        if ($exception instanceof ModelNotFoundException && ($request->wantsJson() || $request->ajax())) {
            return response()->json(['message' => 'Not Found!'], 404);
        }

        return parent::render($request, $exception);
    }
0 голосов
/ 07 июня 2019

Вы можете удалить $request->wantsJson

или вы можете установить заголовок в вашем запросе "Accept" => "application/json"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...