iT邦幫忙

0

laravel 手動引用驗證訊息

我想把$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");
}

2 個回答

1
Victor
iT邦新手 4 級 ‧ 2019-10-30 09:22:59
最佳解答

如果語系檔案已經設定好!

密碼驗證錯誤 取代成 __('auth.failed') 沒意外應該就可以了!

adha9990 iT邦新手 5 級 ‧ 2019-10-30 14:57:32 檢舉

我把驗證錯誤的訊息改成
$validator->errors()->add("email",__("validation.exists"));
出來的結果是 所選擇的:attribute不存在
關於:attribute怎麼改我有查過,但是都顯示不出來
所以希望可以手動去呼叫Validator的錯誤訊息出來

Victor iT邦新手 4 級 ‧ 2019-10-30 16:52:19 檢舉

我個人覺得實務上,不需要讓使用者看到 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");
}
adha9990 iT邦新手 5 級 ‧ 2019-10-30 17:32:30 檢舉

謝謝大大的指點!
我利用大大教我的方法在自己試了一下終於做出我想要的結果了!!!

if(!isset($user)){
        $validator->errors()->add("email",__("validation.exists",[
            'attribute'=>__("validation.attributes.email")
        ]));
        return redirect()->back()->withErrors($validator)->withInput();
    }

https://ithelp.ithome.com.tw/upload/images/20191030/20122444GkLJpqhqaC.png

2
小魚
iT邦大師 1 級 ‧ 2019-10-30 07:21:10

你的問題應該是多語系的問題吧,
這有點複雜,
可以上網查看看多語系要如何處理.

adha9990 iT邦新手 5 級 ‧ 2019-10-30 15:02:43 檢舉

因為是Validator這部分的多語系問題所以我希望使用Validator去處理好
但是我查了好多相關資料都沒有我想要的答案
__()我也有試過但是卡在取代'exists' => '所選擇的:attribute不存在'裡的:attribute

我要發表回答

立即登入回答