Laravel abort () против ответа на запрос () -> json () - PullRequest
2 голосов
/ 22 апреля 2020

В Laravel, в чем разница между abort() и response()->json()?

Например:

return response()->json(['message' => 'Not found'], 404);

и:

abort(404, 'Not found');

Редактировать: Я думаю, abort() не выдает исключение, если APP_DEBUG равно false в .env файле.

Это мой код:

protected function prepareForValidation()
{
    $this->replace(array_filter($this->all()));

    if(!$this->all()) {
        abort(422, 'You must edit something.');
    }
}

Есть ли проблема, если я использую его для немедленной остановки выполнения и возврата сообщения (до начала проверки), если все поля в запросе пусты?

1 Ответ

3 голосов
/ 22 апреля 2020

response()->json(['message' => 'not found'], 404);

Не генерирует исключение, и обработчик исключений не будет обрабатывать его, он просто вернет код состояния 404 с вашим ответом.


abort(404, 'not found');

Выдает исключение NotFoundHttpException() и будет обрабатываться обработчиком исключений, расположенным по адресу: app/Exceptions/Handler.php


См. Функцию abort() ниже:

public function abort($code, $message = '', array $headers = [])
{
    if ($code == 404) {
        throw new NotFoundHttpException($message);
    }

    throw new HttpException($code, $message, null, $headers);
}

Как вы можете видеть выше, функция abort() всегда выдает исключение. Вы просто не увидите подробности исключения, если APP_DEBUG равен true, но оно будет зарегистрировано в вашей папке logs.

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