注册的blade模板:里面的{{old('xxx')}} 就代表原来的输入值
<form class="form-signin" method="POST" action="/register">
{{csrf_field()}}
<h2 class="form-signin-heading">请注册</h2>
<label for="name" class="sr-only">名字</label>
<input type="text" name="name" id="name" class="form-control" placeholder="名字" required autofocus value="{{ old('name') }}">
<label for="inputEmail" class="sr-only">邮箱</label>
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="邮箱" required autofocus value="{{ old('email') }}">
<label for="inputPassword" class="sr-only">密码</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="输入密码" required>
<label class="sr-only">重复密码</label>
<input type="password" name="password_confirmation" class="form-control" placeholder="重复输入密码" required>
@include('layouts.error')
<button class="btn btn-lg btn-primary btn-block" type="submit">注册</button>
</form>
layouts.error balde文件里面:定义一个错误输出模板供其他地方引用
@if(count($errors))
<div class=" xuan" role="alert">
@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</div>
@endif
RegisterController控制器里面:验证通过则存数据库不通过,back->withErrors($vali)->withInput()返回到上一个页面,带着错误信息保留原来输入内容给blade模板
//注册行为
public function register(Request $request)
{
$data = $request->except('_token'); //去除_token,它的作用是csrf安全,而数据库不需要
$vali = RegisterValidate::validate($data);
$data['password'] = bcrypt($data['password']);
if($vali->passes()){
$res = User::create($data);
if($res){
return redirect('/login');
}
return back()->with('errors', '注册失败');
}
return back()->withErrors($vali)->withInput();
}
<input type="password" name="password_confirmation" class="form-control" placeholder="重复输入密码" required>
class RegisterValidate extends Validator
{
public static function validate($data){
#验证字段
$rules = [
'name' => 'required|between:0,30',
'email' => 'required|unique:users,email|email',
'password' => 'required|min:5|confirmed',
];
#提示信息
$messages = [
'name.required' => '用户名不能为空',
'name.between' => '用户名不能太长',
'email.required' => '邮箱不能为空',
'password.min' => '密码至少5位',
'password.required' => '密码不能为空',
'password.confirmed' => '两次密码不一致',
];
#调用验证
$res = Validator::make($data, $rules, $messages);
return $res;
}
}