2016-01-12 39 views
7

ログイン/登録に失敗したときに表示されるエラーメッセージ("These credentials do not match our records."など)をファンデーションファイルに触れることなくカスタマイズするにはどうすればよいですか?私は、少なくとも接触していない、ソリューションとうまくいけば、エレガントなものを探していますAuthenticatesAndRegistersUsersThrottlesLogins :)Laravel 5.2 - 認証:カスタムエラーメッセージを表示

私が実行した後にLaravelにより提供さAuthControllerとフォームを使用しています:

PHPの職人メイク:認証

コントローラー:

(それが唯一のコンストラクタと2つのメソッドがあり、残りはフンに落ちます[キャンセル料、方法は:)

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> 

ありがとうございます!

答えて

11

あなたは

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

かどうか、それを上書きして、auth.failedのためのLANG値を設定しAuthenticatesUsersトレイトから来AuthControllergetFailedLoginMessageを上書きすることができます。 getFailedLoginMessageメソッドはLang::has('auth.failed')をチェックし、利用可能な場合はそれを使用します。

postLoginを無効にして独自のメッセージ配列をvalidateに渡すことができます。また、それらをグローバルに変更する場合は、該当するlangファイルでresources/lang/{lang}/validation.phpに調整することができます。

+0

回答ありがとう@lagbox!他のすべてのエラーメッセージはどうでしょうか?「名前フィールドは必須です」または「パスワードの確認が一致しません」。ユーザー登録フォームには? –

+1

これらは検証メッセージです。認証コントローラは、独自のメッセージ配列をvalidate呼び出しに渡すか、またはpullするlangファイル内のメッセージをグローバルに更新するように調整できます。 – lagbox

+0

受け入れられ、upvoted、ありがとう、よろしく! –

4

AuthControllerのgetFailedLoginMessage()メソッドをオーバーライドする必要はありません。適切な解決策は、設計された場所でメッセージを変更することです。 Resources> lang> enフォルダを見ると、auth.phpファイルが表示されます。その中には、カスタマイズ可能なメッセージを持つ「失敗した」属性があります。それを変更してください。ベンダーのLaravel認証ファイルのorignial getFailedLoginMessage()メソッドは、デフォルトで確定する前に、カスタムメッセージの位置を最初に探します。

+0

ありがとうジョシュア!! :) –