引言:在Controller内,Laravel使用ValidatesRequests 这个trait来做请求验证
1、对请求进行验证,如表单的post请求提交,并且视图模板中显示验证信息
先在route.php中写两个路由:
Route::get('laravel/test/validator', 'PHPTestController@getValidator');
Route::get('laravel/test/validator', 'PHPTestController@postValidator');
再在PHPTestController.php中写getValidator方法,返回一个表单提交页面(使用bootstrap库来做样式和交互):
/app/Http/PHPTestController.php:
public function getValidator(){
return view('validator.validator');
}
/resources/validator/validator.blade.php:
<html>
<head>
<title>Laravel Validator Test</title>
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12">
<form action="{{url('laravel/test/validator')}}" method="POST">
<legend style="text-align: center">表单提交</legend>
<label style="margin-left: 50%">Company Name</label>
<input type="text" name="name">
<button type="submit" class="btn btn-success">Submit</button>
</form>
</div>
</div>
</div>
<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
表单提交页面:
在PHPTestController.php中写上postValidator方法:
public function postValidator(Request $request){
$this->validate($request, [
'name' => 'required',
]);
dd('form post success!!!');
}
input里不填,点击提交按钮,不会打印”form post success!!!”,说明$this->validate()函数工作了,但怎么打印错误信息:
/resources/validator/validator.blade.php,在</form>标签后面加上显示错误信息:
@if(count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
</div>
@endif
其中,Laravel在每次请求中把
errors刷到session中,和视图模板绑定,所以
errors是可用的不会报错,官方文档原话:”So, it is important to note that an $errors variable will always be available in all of your views on every request“。
Laravel提供了很多验证规则可用,也非常好用。玩下整数规则,修改试图代码:
<legend style="text-align: center">表单提交</legend>
<label style="margin-left: 50%">Name</label>
<input type="text" name="name">
<label style="margin-left: 50%">Age</label>
<input type="text" name="age">
修改下验证规则:
$this->validate($request, [
'name' => 'required',
'age' => 'required|integer',
]);
则age必须输入为整数:
3、验证数组形式的表单,显示验证信息
4、定制一个表单请求验证类,使控制器代码简约
5、定制自己的验证规则