天天看点

(三)Laravel学习笔记之验证Validator

引言:在Controller内,Laravel使用ValidatesRequests 这个trait来做请求验证

1、对请求进行验证,如表单的post请求提交,并且视图模板中显示验证信息

先在route.php中写两个路由:

Route::get('laravel/test/validator', '[email protected]');
 Route::get('laravel/test/validator', '[email protected]');
           

再在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>
           

表单提交页面:

(三)Laravel学习笔记之验证Validator

在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学习笔记之验证Validator

其中,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必须输入为整数:

(三)Laravel学习笔记之验证Validator

3、验证数组形式的表单,显示验证信息

4、定制一个表单请求验证类,使控制器代码简约

5、定制自己的验证规则