Laravel教程 七:表单验证 Validation

Laravel教程 七:表单验证 Validation

此文章为原创文章,未经赞成,禁止转载。php

终于要更新这个Laravel系列教程的第七篇了,期间去写了一点其余的东西。nginx

就不 说废话了吧,直接进入Form Validation的部分吧。几乎在每个web应用当中都会有表单,而有表单基本就离不开表单验证。在laravel中,其实能够说是有两种方式来进行表单验证:使用Request和使用Validation。下面将分开讲这两部分的内容,并且我会更着重第一种,也更推荐你们使用第一种laravel

Request表单验证

为何说是会把精力都放在讲解第一种验证方式呢?由于我的以为第一种方式在相同的验证条件下,更加易于维护和能够进行代码重用。并且写代码的形式 更适 用于Laravel和我我的的使用习惯:可使用命令行来生成代码。也就是可使用artisan这个工具:web

替代文字

php artisan make:request StoreArticleRequest 

在项目目录下使用artisan的make:request命令就能够生成一个用于表单验证Request类了,这个类咱们在这里命名为StoreArticleRequest,你也能够以你本身喜欢的方式来命名,但我仍是推荐你们在命名的时候尽可能使得名字比较人性化一点,这样会比较对于后期再看代码的时候有不少好处。这个命令生成的文件位于app/Http/Requests/这个文件夹当中,咱们打开这个文件来看:数据库

class StoreArticleRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ // ]; } } 

实现验证

能够看到里面会有两个方法:authorize()和 rules() 。authorize()能够这样简单地理解:咱们在处理这个表单请求(一般是一个post请求)的时候是不是须要进行身份验证,这种验证是指:好比A发表的评论,B能不能进行编辑。若是不能,则保留返回false,若是能够,则修改返回true。那么咱们这里的逻辑是:既然是发表文章,在咱们这个站点注册的用户(若是开放注册的话)都是能够发表文章的,因此咱们首先修改authorize()方法,将其返回值改成:return true;数组

而后对于rules()方法,咱们须要在这里设置咱们的验证规则,好比咱们能够设置下面这个的验证规则:app

public function rules() { return [ 'title' => 'required', 'content' => 'required' ]; } 

由于咱们在建立文章的时候,咱们会有两个提交过来的字段:titlecontent。这是咱们在设计articles表的时候设置的两个字段。工具

而后,上面的验证规则是:对于titlecontent两个字段,咱们须要用户为其填充内容,不能为空。post

既然这里的规则设置好以后,咱们该怎么应用起来呢?也就是咱们怎么在将文章存入数据库以前进行验证呢?很简单,咱们只须要稍微修改ArticleControllerstore()方法:ui

替代文字

public function store(Requests\StoreArticleRequest $request) { $input = $request->all(); //下面增长两行,顺便看看Request::get的使用 $input['intro'] = mb_substr($request->get('content'),0,64); } 

咱们将整个StoreArticleRequest类的实例以$request变量传入store()方法,这个时候,laravel 就会自动检查咱们是否须要进行表单验证(rules方法有没有定义验证规则),若是有须要验证的话,laravel会首先走验证这条路,若是验证没有经过,store()方法内的代码不会被执行,而是直接跳转到提交表单的页面,这里是:http://blog.dev/article/create 这个页面。若是全部的验证都经过以后,才会执行store()内部的代码,也就是才会执行到$input = $request->all();这里以及往下的代码。。。好比咱们来试试留空的时候是什么样的状况:

替代文字

##反馈错误

上面的图片中好像没有什么变化,但实际上是已经提交了一次了,可是又立刻跳转回来了。咱们可使用下面的方式来验证一下:

@if($errors->any()) <ul class="alert alert-danger"> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> @endif 

create.blade.php这个视图文件中增长上面的代码,我这里是放在{!! Form::close() !!}后面。这里的意思大概就是,若是有任何表单验证的错误消息,咱们就讲这个信息打印出来反馈给用户。若是没有,则不会显示信息。咱们再来试一下:

替代文字

这时候能够看到,咱们在表单验证没有经过的时候,在页面显示了相对应的错误信息。若是没有错误,就建立一篇文章。

tips:若是你不想错误信息为英文,能够到resources/lang/en/validation.php修改,或者你直接建立一个新的语言文件包。

多个验证规则

OK,这里,咱们基本是将这个这个验证流程走通了。可是,在实际的开发中,咱们的验证并不都是这个简单:要是咱们要对一个字段设置多个验证规则呢?好比咱们但愿文章的title最少不能少于三个字节长度呢?咱们能够这样,在rules()方法中:

'title' => 'required|min:3', 

在laravel中,咱们使用|将多个规则分开,:表示规则的值。其实这里你也可使用数组的,可是我仍是推荐你们像上面这样写,简洁明了。

其余经常使用验证规则

至于更多地验证规则,好比注册的时候,验证一个email和确认密码的时候,咱们怎么须要怎么写的呢?

'email'=>'required|email', 'password'=>'required|min:6|confirmed', 'password_confirmation' => 'required|min:6' 

上面我直接给出这两个经常使用场景的最多见的写法,email就表明验证所填的信息是不是一个正确地邮箱格式了,至于确认密码就使用confirmed来指定,这里注意是confirmed而不是confirme。并且第二次输入密码的字段须要写成password_confirmation这个形式,也就是在视图中,咱们会有相似这样的input表单:

<input type="password" name="password" /> <input type="password" name="password_confirmation" /> 

关于更多验证规则,参考官方文档:

http://laravel.com/docs/5.1/validation

使用Validation

使用这个以前能够将store(Requests\StoreArticleRequest $request)中的变量去掉

使用Validation的时候,多用于验证一些简单的表单验证。这里演示直接写于ArticleController当中,直接使用Validator::make(),使用方式为Validator::make(array $request,array $rules),好比说咱们的例子能够在store()中写成:

$input = Request::all(); $validator = Validator::make($input, [ 'title' => 'required|min:3', 'body' => 'required', ]); 

而后可使用下面这样的方式来检查验证有没有经过:

if ($validator->fails()) { } 

验证经过以后,咱们才进行下一步操做,好比将数据存入数据库。一个基本的Validation流程就完成了,并且关于Validation的部分,我也只想介绍到这里,由于我会安利你们使用第一种方式:Request。

tips:这两种方式的背后都是使用同样的验证机制。

##总结

这里就基本将基础的表单验证说完了,下一节我准说说queryScope和SetAttributes的使用,这两个对于咱们的数据入库的预处理和代码重用都颇有帮助,因此下次会先说这两个知识点:咱们会先对published_at这个字段的设置和使用发挥出来,到时候你就知道设置这个字段的好处了。

最后:Happy Hacking

相关文章
相关标签/搜索