1.Laravel的表单验证是基于Validator类完成的
2.通过一个修改密码的功能说明Validator的使用
useValidator;
//修改密码
public function modify_password(Request $request){
if($request->isMethod('post')){
$input = $request->all();
$rules = [
'password_o'=>'required',
'password'=>'required|between:6,20|confirmed',
];
$messages = [
'password_o.required'=>'旧密码不能为空',
'password.required'=>'新密码不能为空',
'password.between'=>'新密码必须在6至20位之间',
'password.confirmed'=>'新密码与确认密码不一致',
];
$validator = Validator::make($input,$rules,$messages);
if($validator->fails()){
return back()->withErrors($validator);
}else{
//$userModel = new User();
$user = User::find(session('user_id'));
if($input['password_o'] != Crypt::decrypt($user->password)){
return back()->with('errors','原密码错误');
}else{
$user->password = Crypt::encrypt($input['password']);
if($user->save()){
return back()->with('errors','修改成功');
}else{
return back()->with('errors','修改失败');
}
}
}
}
return view('admin.modify_password');
}
(1)需要有要验证的字段、验证规则及提示信息三个参数
(2)在模板要显示的错误信息中,除了不符合验证规则的信息外,还有其他显示信息,因此这里用到了return back()->with('errors','原密码错误');
(3)模板中错误信息的显示(注意与手册不同,添加了一个判断)
@if(count($errors)>0) @if(is_object($errors)) @foreach($errors->all() as $v) <p>{{$v}}</p> @endforeach @else <p>{{$errors}}</p> @endif @endif
(4)新密码与确认密码一致性的判断
新密码字段名为password,确认密码字段名必须为password_confirmation(在password后面加上_confirmation,_confirmation位固定写法),否则无法使用confirmed规则