TheRikipm
@TheRikipm
Backend middle

Почему ошибка о неверных данных для входа ассоциирована с email?

Использую стандартный модуль для аутентификации.
Есть следующая страница login.blade.php
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror"name="email" value="{{ old('email') }}" autofocus>
@error('email')
    <span class="invalid-feedback" role="alert">
        <strong>{{ $message }}</strong>
    </span>
@enderror

<input id="password" type="password" class="form-control @error('password') is-invalid @enderror"name="password" value="{{ old('password') }}" autofocus>

@error('password')
    <span class="invalid-feedback" role="alert">
        <strong>{{ $message }}</strong>
    </span>
@enderror

Здесь:
1. В случае проблем с полем email (например поле пустое), выведется первый спан, внутри него текст ошибки (Email field cannot be empty)
2. Аналогично для пароля, но тут уже выводится второй спан
3. НО, в случае передачи неверных данных для входа ошибка "This credentials dont match our records" выводится в первом спане

Смог нагуглить что запись
@error('email')
Эквивалентна
@if ($errors->has('email'))

Сделал вывод что с помощью $errors->first('MyField') мы можем получить ошибку "ассоциированную" с полем MyField.

Собственно вопросы:
1) Почему ошибка This credentials dont match our records выводится в первом спане (т.е. ассоциирована с полем email и возвращается при помощи $errors->first('email'))? Что делать если я хочу выводить ошибки о пустом email и о неверных данных в разных блоках? Как ассоциировать ошибку о неверных данных с другим полем?
Порылся в исходниках и не нашел места где это происходит.

2) Как получить полный список всех ошибок в формате
Имя Поля : Текст ошибки (ну или любом похожем)?

Пробовал print_r($errors->all()), но выводится просто массив всех ошибок, без данных о том с каким полем они ассоциированы.
  • Вопрос задан
  • 403 просмотра
Решения вопроса 1
TheRikipm
@TheRikipm Автор вопроса
Backend middle
Мда, только запостил вопрос и сразу нашел ответ. Не знаю удалять или нет, возможно кто-то столкнется с такой-же проблемой

файл
vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php:133


protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')], // <-- Вот тут нужно поменять $this->username на имя любого поля
    ]);
}

/**
 * Get the login username to be used by the controller.
 *
 * @return string
 */
public function username()
{
    return 'email';
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы