Laravel教程 七:表单验证 Validation

时间:2022-05-18 12:48:24

Laravel教程 七:表单验证 Validation

此文章为原创文章,未经同意,禁止转载。

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

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

Request表单验证

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

Laravel教程 七:表单验证 Validation

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()方法,我们需要在这里设置我们的验证规则,比如我们可以设置下面这个的验证规则:

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

因为我们在创建文章的时候,我们会有两个提交过来的字段:titlecontent。这是我们在设计articles表的时候设置的两个字段。

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

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

Laravel教程 七:表单验证 Validation

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();这里以及往下的代码。。。比如我们来试试留空的时候是什么样的情况:

Laravel教程 七:表单验证 Validation

##反馈错误

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

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

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

Laravel教程 七:表单验证 Validation

这时候可以看到,我们在表单验证没有通过的时候,在页面显示了相对应的错误信息。如果没有错误,就创建一篇文章。

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

Laravel教程 七:表单验证 Validation的更多相关文章

  1. 最适合入门的Laravel中级教程&lpar;三&rpar;表单验证

    做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...

  2. Laravel在进行表单验证时,错误信息未返回

    马上要毕业了,找了现在的这家公司,压力不大,自己也比较喜欢,唯一的遗憾就是手机号莫得换了(找不到换的借口). 进入正题: 之前自己的博客(http://lxiaoke.cn)是用ThinkPHP开发的 ...

  3. 表单验证的validate&period;js插件---jQuery Validation Plugin

    早上在公交车上看了一个关于慕课网的教程<表单验证的validate.js插件---jQuery Validation Plugin>,正好可以用到自己近期开发简易微博的注册页面和登录页面, ...

  4. &lbrack;Laravel 5&rsqb; 表单验证 Form Requests and Controller Validation

    本文 转载自:http://blog.hsin.tw/2015/laravel-5-note09-form-requests-and-controller-validation/ 文章解答了我的困惑非 ...

  5. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  6. struts2官方 中文教程 系列六:表单验证

    先贴个本帖的地址,以免被爬:struts2教程 官方系列六:表单验证  即 http://www.cnblogs.com/linghaoxinpian/p/6906720.html 下载本章节代码 介 ...

  7. jQuery学习之路(8)- 表单验证插件-Validation

    ▓▓▓▓▓▓ 大致介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 ...

  8. jQuery Validation Engine 表单验证

    功能强大的 jQuery 表单验证插件,适用于日常的 E-mail.电话号码.网址等验证及 Ajax 验证,除自身拥有丰富的验证规则外,还可以添加自定义的验证规则. 兼容 IE 6+, Chrome, ...

  9. 表单验证——jquery validate使用说明【另一个教程】

    [参考:http://www.tuicool.com/articles/y6fyme] jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证 ...

随机推荐

  1. HTML5调用手机相机拍照

    前端调用手机相机拍照 实现方式常见有两种: 一种是通过video控件,通过捕获video的流,截取video中的图像实现拍照, 还有一种是通过input[file]控件调用移动端的摄像头,实现拍照. ...

  2. Spring Trasnaction管理(1)- 线程间事务隔离

    问题导读 Spring中事务是如何实现的 Spring中各个线程间是如何进行连接.事务隔离的 Spring事务配置 Spring的事务管理应该是日常开发中总会碰到的,但是Spring具体是怎么实现线程 ...

  3. 《Linux内核设计的艺术》学习笔记(五)INT 0x10中断

    参考书籍: 1. <IBM-PC汇编语言程序设计> 2. http://www.ctyme.com/intr/int-10.htm   ◆ 设置显示方式: 功能号:AH = 00H 调用参 ...

  4. NDK GDB 中打印vector &comma; vector&lt&semi;vector &lt&semi;&gt&semi; &gt&semi;

    在android上进行native开发的时候,我们需要用NDK-GDB 对native code进行调试,其中很麻烦的是,我使用的NDK版本是4.0,该版本还不支持用NDK-GDB直接打印vector ...

  5. 认识Backbone &lpar;三&rpar;

    Backbone.Collection(集合)  collection是model对象的一个有序的组合,我们可以在集合上绑定 "change" 事件,从而当集合中的模型发生变化时f ...

  6. jQuery焦点图切换特效插件封装

    网站焦点图是一种网站内容的展现形式,可简单理解为一张图片或多张图片展现在网页上就是网站焦点图.在网站很明显的位置,用图片组合播放的形式,类似焦点新闻的意思只不过加上了图片.一般多使用在网站首页版面或频 ...

  7. 【转载】makefile经典教程

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客: http://blog.csdn.net/haoel/article/details/2886 makefile很重 ...

  8. SqlServer突破亿级数据操作瓶颈(出处&colon;转载)

    首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...

  9. 实战申请Let&&num;39&semi;s Encrypt永久免费SSL证书过程教程及常见问题

    最近需要https这里看到一份不错的博客,收录一下! Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla.Cisco.Akamai.IdenTrust ...

  10. tnsping无法ping通的问题,TNS-12535 TNS操作超时 (服务器环境:window server 2008R2 数据库环境:oracle 11 g)

    今天新搭建一个测试用的数据库服务器,操作系统为WIN server 2008 r2 版本.系统内已安装oracle 11g database,数据库服务端已配置完毕,监听listener已开启. 我在 ...