2016-01-12 25 views
7

Wie kann ich die Fehlermeldungen (z. B. "These credentials do not match our records.") anpassen, die bei fehlgeschlagener Anmeldung/Registrierung angezeigt werden, ohne die Basisdateien zu berühren? Ich bin auf der Suche nach einer Lösung und hoffentlich ein eleganten, zumindest nicht zu berühren AuthenticatesAndRegistersUsers noch ThrottlesLogins :)Laravel 5.2 - Auth: benutzerdefinierte Fehlermeldungen anzeigen

Ich benutze die AuthController und durch Laravel hierfür vorgesehenen Formulare nach der Ausführung:

php Handwerker machen: auth

Controller:

(es nur einen Konstruktor und zwei Methoden hat, fällt der Rest auf der foun dierung sind die Methoden :)

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:

<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> 

Thank you!

Antwort

11

Sie können getFailedLoginMessage auf den AuthController außer Kraft setzen, die aus dem AuthenticatesUsers Merkmale

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

Oder auch nicht außer Kraft setzt es darum geht, und einen lang Wert für auth.failed gesetzt. Die getFailedLoginMessage Methode prüft auf Lang::has('auth.failed') und verwendet das, wenn es verfügbar ist.

Für die eigentliche Validierung Fehlermeldungen können Sie die postLogin und übergeben Sie Ihre eigene Reihe von Nachrichten an validate oder außer Kraft setzen, wenn Sie sie global ändern wollte man sie in der entsprechenden lang in resources/lang/{lang}/validation.php Datei einzustellen.

+0

Danke für die Antwort @lagbox! Wie wäre es mit jeder anderen Fehlermeldung, "Das Namensfeld ist erforderlich." oder "Die Passwortbestätigung stimmt nicht überein." auf dem Benutzerregistrierungsformular? –

+1

Dies sind die Validierungsnachrichten. Sie können den AuthController so anpassen, dass er Ihr eigenes Nachrichtenarray an den Validierungsaufruf weiterleitet oder diese global in der lang-Datei aktualisiert, von der sie stammen. – lagbox

+0

Akzeptiert und Upvoted, danke, mein Herr! –

4

Sie möchten die Methode getFailedLoginMessage() in AuthController nicht überschreiben. Die richtige Lösung besteht darin, die Nachricht am vorgesehenen Speicherort zu ändern. Wenn Sie in den Ordner Resources> lang> de schauen, sehen Sie eine auth.php-Datei. Darin gibt es ein "fehlgeschlagenes" Attribut mit einer Nachricht, die Sie anpassen können. Ändere es dort. Die orignial-Methode getFailedLoginMessage() in den Laravel-Auth-Dateien des Anbieters sucht zuerst nach diesem Speicherort für eine benutzerdefinierte Nachricht, bevor sie sich auf den Standardwert einstellt.

+0

Danke Joshua !! :) –