Обработка индивидуальных сообщений об ошибках с помощью исключения firstOrFail в Laravel

В Laravel метод firstOrFailобычно используется для получения первой записи из таблицы базы данных и создания исключения, если запись не найдена. Хотя Laravel предоставляет сообщения об ошибках по умолчанию для исключений, существуют сценарии, в которых вам может потребоваться настроить сообщение об ошибке для лучшего взаимодействия с пользователем. В этой статье мы рассмотрим различные методы возврата индивидуальных сообщений об ошибках при использовании исключения firstOrFailв Laravel, а также приведем примеры кода.

Метод 1: использование конструктора исключений firstOrFail
Метод firstOrFailгенерирует исключение ModelNotFoundException, если запись не найдена. Вы можете настроить сообщение об ошибке, передав его в качестве параметра конструктору исключений.

use Illuminate\Database\Eloquent\ModelNotFoundException;
try {
    $record = Model::where('column', $value)->firstOrFail();
} catch (ModelNotFoundException $exception) {
    throw new ModelNotFoundException('Custom error message');
}

Метод 2: переопределение метода render
Вы можете переопределить метод renderв обработчике исключений вашего приложения, чтобы возвращать настроенное сообщение об ошибке, когда ModelNotFoundExceptionвстречается.

Создайте новый метод в файле app/Exceptions/Handler.php:

use Illuminate\Database\Eloquent\ModelNotFoundException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
protected function renderModelNotFoundException(ModelNotFoundException $exception)
{
    return response()->json([
        'error' => 'Custom error message',
    ], 404);
}

Метод 3: использование локализации Laravel
Функция локализации Laravel позволяет хранить сообщения об ошибках в языковых файлах. Используя эту функцию, вы можете легко предоставлять переведенные и настроенные сообщения об ошибках для разных языков.

  1. Создайте новый языковой файл resources/lang/en/errors.php:

    <?php
    return [
    'custom_error_message' => 'Custom error message',
    ];
  2. Измените метод renderв app/Exceptions/Handler.php:

    use Illuminate\Database\Eloquent\ModelNotFoundException;
    protected function renderModelNotFoundException(ModelNotFoundException $exception)
    {
    return response()->json([
        'error' => __('errors.custom_error_message'),
    ], 404);
    }

Применяя эти методы, вы можете возвращать индивидуальные сообщения об ошибках при использовании исключения firstOrFailв Laravel. Независимо от того, решите ли вы изменить конструктор исключений, переопределить метод renderили использовать функцию локализации Laravel, у вас есть возможность обеспечить лучшее взаимодействие с пользователем, предоставляя содержательные и персонализированные сообщения об ошибках.