Saba note

醜悪コード Ugly hacks ITものづくり

Laravel5のログインエラーのauth.failed

auth.failedというバリデーションエラー(というかログイン認証のエラー)時だけvendorの中でべた書きになっているのでが嫌ですね。なんでvalidation.phpに書いてくれてないんですかね。
日本語に修正するには、
vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
のエラー文言を日本語にしてあげます。

protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')], ← ここ
    ]);
}

しかしこれだと結構気持ちがわるいしupdateすると英語に戻ってしまうことになるので、traitをオーバーライドした方が本当はいいんだろうなと。

traitをオーバーライドする

PHPのトレイトはクラスでオーバーライドすることができる、あるいは同じメソッド名をつけると勝手にオーバーラードしてしまうというものなので、こういう場合もクラスから操作する方がいいです。
(とはいえ、更新が大きくはしった場合はエラーになるので要注意)
まずは、
app/Http/Controllers/Auth/LoginController.phpに必要なuseを追加します。現時点ではこれだけ。

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\ValidationException;

LoginControllerではRequest,Facades\Auth,Validation\ValidationExceptionがないのでオーバーライドする際には同じものが必要になります。でtraitで書かれているものと全く同じメソッドを書いてあげればいいです。

protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('認証に失敗しました。')],
    ]);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です