Laravel 5.2 - Auth: отображать пользовательские сообщения об ошибках

Как я могу настроить сообщения об ошибках (например, "These credentials do not match our records."), которые отображаются при неудачном входе в систему / регистрации без необходимости трогать фундаментальные файлы? Я ищу решение и, надеюсь, элегантное, по крайней мере, не трогая AuthenticatesAndRegistersUsers ни ThrottlesLogins:)

Я использую AuthController и формы, предоставленные Laravel после выполнения:

php artisan make: auth

контроллер:

(он имеет только конструктор и два метода, остальное ложится на фундамент, методы:)

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|max:255',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|confirmed|min:6',
    ]);
}
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);
}

Форма:

<form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}">
{!! csrf_field() !!}

<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
    <label class="col-md-4 control-label">E-Mail</label>

    <div class="col-md-6">
        <input type="email" class="form-control" name="email" value="{{ old('email') }}" required>

        @if ($errors->has('email'))
            <span class="help-block">
                <strong>{{ $errors->first('email') }}</strong>
            </span>
        @endif
    </div>
</div>

<div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
    <label class="col-md-4 control-label">Password</label>

    <div class="col-md-6">
        <input type="password" class="form-control" name="password" required>

        @if ($errors->has('password'))
            <span class="help-block">
                <strong>{{ $errors->first('password') }}</strong>
            </span>
        @endif
    </div>
</div>

<div class="form-group">
    <div class="col-md-6 col-md-offset-4">
        <div class="checkbox">
            <label>
                <input type="checkbox" name="remember"> Remember Me
            </label>
        </div>
    </div>
</div>

<div class="form-group">
    <div class="col-md-6 col-md-offset-4">
        <button type="submit" class="btn btn-primary">
            <i class="fa fa-btn fa-sign-in"></i>Login
        </button>

        <a class="btn btn-link" href="{{ url('/password/reset') }}">Forgot Your Password?</a>
    </div>
</div>

Спасибо!

2 ответа

Решение

Вы можете переопределить getFailedLoginMessage на AuthController который исходит от AuthenticatesUsers черта характера

protected function getFailedLoginMessage()
{
    return 'what you want here.';
}

Или не переопределить его и установить значение языка для auth.failed, getFailedLoginMessage Метод проверит Lang::has('auth.failed') и использовать это, если оно доступно.

Для актуальных сообщений об ошибках валидации вы можете переопределить postLogin и передать свой собственный массив сообщений validateили, если вы хотите изменить их глобально, вы можете настроить их в соответствующем файле lang в resources/lang/{lang}/validation.php,

Вы не хотите переопределять метод getFailedLoginMessage() в AuthController. Правильное решение - изменить сообщение в заданном месте. Если вы загляните в папку Resources > lang > en, вы увидите файл auth.php. В нем есть атрибут "fail" с сообщением, которое вы можете настроить. Измените это там. Метод orignial getFailedLoginMessage() в файлах аутентификации Laravel вендора сначала ищет в этом месте пользовательское сообщение, прежде чем установить значение по умолчанию.

Другие вопросы по тегам