我想把$validator->errors()->add("password","密碼驗證錯誤");
改成Validator::make()出來的驗證訊息一樣,判斷exists
請問該怎麼手動引用語系已設定好的驗證訊息?
public function loginProcess(){
$input = request()->all();
$validator = Validator::make($input,[
'email' => [
'required',
'email',
],
'password' => [
'required',
],
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$user = User::where('email', $input['email'])->first();
if(!isset($user)){
$validator->errors()->add("email","電子信箱驗證錯誤");
return redirect()->back()->withErrors($validator)->withInput();
}
if(!Hash::check($input['password'],$user->password)){
$validator->errors()->add("password","密碼驗證錯誤");
return redirect()->back()->withErrors($validator)->withInput();
}
return redirect()->route("home");
}
如果語系檔案已經設定好!
密碼驗證錯誤
取代成 __('auth.failed')
沒意外應該就可以了!
我把驗證錯誤的訊息改成$validator->errors()->add("email",__("validation.exists"));
出來的結果是 所選擇的:attribute不存在
關於:attribute
怎麼改我有查過,但是都顯示不出來
所以希望可以手動去呼叫Validator的錯誤訊息出來
我個人覺得實務上,不需要讓使用者看到 EMAIL不存在資料庫這件事,回傳 使用者名稱或密碼錯誤
的訊息就可以了!
前面的驗證是驗證使用者輸入的資料正不正確。後面是登入的結果!
如果真的要使用 validation.exists
的提醒字樣
__("validation.exists",[
'attribute'=>'電子郵件'
])
就可以顯示了!
public function loginProcess(){
//請求資料
$input = request()->all();
//驗證使用者資料正不正確開始
$validator = Validator::make($input,[
'email' => [
'required',
'email',
],
'password' => [
'required',
],
]);
//驗證失敗時 (情況:email沒有填寫或是非E-MAIL格式、password未填寫時)
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
//以下是確認使用者密碼正不正確
//找使用者
$user = User::where('email', $input['email'])->first();
// 沒找到
if(!isset($user)){
$validator->errors()->add("email","電子信箱驗證錯誤");
return redirect()->back()->withErrors($validator)->withInput();
}
//加密並比對密碼
if(!Hash::check($input['password'],$user->password)){
$validator->errors()->add("password","密碼驗證錯誤");
return redirect()->back()->withErrors($validator)->withInput();
}
//成功返回 home
return redirect()->route("home");
}
謝謝大大的指點!
我利用大大教我的方法在自己試了一下終於做出我想要的結果了!!!
if(!isset($user)){
$validator->errors()->add("email",__("validation.exists",[
'attribute'=>__("validation.attributes.email")
]));
return redirect()->back()->withErrors($validator)->withInput();
}
你的問題應該是多語系的問題吧,
這有點複雜,
可以上網查看看多語系要如何處理.