### 前端验证
[TOC=4,6]
#### 为什么需要前端验证
前端验证是指在浏览器端的验证。前端的验证主要是为了提升系统的**友好性**,让用户第一时间(在提交之前)发现自己输入数据的错误,进而进行改正,而不是等用户提交以后再返回改正。因为,返回时,用户输入的所有数据都会被清空,此时让用户重新输入数据,他们一定会无比头大!虽然说这种验证手段看起来也可以提升系统的安全性,但是,由于这种前端验证时使用JavaScript验证的,当浏览器禁用JS脚本,或者用户采用其它手段绕过JS的时候,这种验证就失效了,所以说它是为了**友好性**而生的更为靠谱。而安全性主要靠后端的验证来实现,我们在后面会讲到。
#### 使用的技术
前面已经讲过,前端验证使用的时JavaScript,实时检测用户输入情况,第一时间告知用户输入异常,您可以使用原生的Javascript代码来验证,当然,现在关于前端验证的JS插件也是层出不穷,插件即美观,而且通过简单的配置就可以完成验证功能,节省了我们大量的时间。由于我们是图库使用的时BootStrap技术,那么我们的验证也就相应的采用BootStrap验证插件——**BootStrapValidator**。
#### 前端验证的实现
BootStrapValidator可以用于完成基于BootStrap搭建的前端UI中的输入验证,由于本插件完全基于BootStrap因此可以和UI完美的融合在一起。下面直接上图,看看完成后的结果:
输入出错时:
![](https://box.kancloud.cn/60efdf25a1a106f9e994d9b39b300e06_1057x579.png)
输入正确时:
![](https://box.kancloud.cn/372d4b599662771e0d517bb65192e49c_1072x490.png)
怎么样,还比较和谐把,当然你也可以修改默认样式,让它的显示方式更加美观。
下面来说说他的用法:
下载BootStrapValidator
你可以http://bv.doc.javake.cn/ 来下载它。
下载后的目录结构
下载完成后,如果是全部文件的化,目录结构如下:
![](https://box.kancloud.cn/4dfc088d44dab48d8713cc6e8d4e5a44_289x423.png)
其中可以直接在项目中使用的文件都放在dist文件夹中,使用的实例放在demo中,它所依赖的BootStrap以及Jquery文件都放在Vendor文件夹中。
>[info] 如果您项目的BootStrap版本和它所使用的版本不一致,建议使用它的BootStrap文件,否则可能会导致显示效果出问题(困扰了我好几天,终于解决了)
下面看看怎么用:
(1)将插件融入当前项目中
根据ThinkPHP5官方教程的建议,将第三方插件放入项目的**Public/Static/Vendor**目录下,并将插件的文件按类别放置在CSS、JS子文件夹下。Public文件夹一般存放网站的资源文件,而其下的Static文件夹主要用于存放静态文件,如CSS,js,img图片等,我们在Static文件夹新建**Vendor**文件夹用于存放第三方插件(主要是前端插件)。项目中目录结构如下图所示:
![](https://box.kancloud.cn/c6699b2e5bdbb0fc9c507d416dd3d955_273x280.png)
>[danger] 记住,千万不要在public目录之外的任何位置放置资源文件,包括application目录
(2)库引用
~~~
<link rel="stylesheet" href="__PUBLIC__/static/vendor/bootstrap/css/bootstrap.min.css"/>
<script src="__PUBLIC__/static/js/jquery.min.js"></script>
<script src="__PUBLIC__/static/vendor/bootstrap/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="__PUBLIC__/static/vendor/bootstrapvalidator/css/bootstrapValidator.min.css"/>
<script type="text/javascript" src="__PUBLIC__/static/vendor/bootstrapvalidator/js/bootstrapValidator.min.js"></script>
~~~
主要引用了BootStrap的js和css文件,以及BootStrapValidator的js和CSS文件。以上是根据我的项目结构来引用的,当然您可以按照自己的想法来建立目录。
注意这里使用了`__PUBLLIC__`,ThinkPHP5取消了默认的视图输出替换,比如`__APP__`,`__URL__`等变量,老用户可能使用不习惯。在新版本中,需要用户自己配置替换输出,如本项目中在**application\config.php**中配置了`__PUBLIC__`替换规则,代码如下(dc为项目名称,本项目并没有部署在网站发布的根目录——xampp的htdocs文件夹下,而是在其中的dc文件夹下作为二级目录):
~~~
// 视图输出字符串内容替换
'view_replace_str' => [
'__PUBLIC__'=>'/dc/public',
'__ROOT__' => '/dc/',
],
~~~
(3)HTML部分
~~~
<div class="row">
<form action="dologin" method="post" id="loginform">
<div class="form-group">
<div class="input-group input-group-md">
<span class="input-group-addon" id="sizing-addon1"><i class="glyphicon glyphicon-user" aria-hidden="true"></i></span>
<input type="text" class="form-control" name="username" placeholder="用户名" />
</div>
</div>
<div class="form-group">
<div class="input-group input-group-md">
<span class="input-group-addon" id="sizing-addon1"><i class="glyphicon glyphicon-lock"></i></span>
<input type="password" class="form-control" name="pwd" placeholder="密码" />
</div>
</div>
<div class="well well-sm" style="text-align:center;">
<input type="radio" name="kind" value="tea"> 老师
<input type="radio" name="kind" value="stu"> 学生
</div>
<button type="submit" class="btn btn-success btn-block">
登录
</button>
</form>
</div>
~~~
(4)Jquery验证部分代码
~~~
$(document).ready(function(){
// 在这里写你的代码...
$('#loginform').bootstrapValidator({
message:"您的输入值不合法",
feedbackIcons:{
valid: 'glyphicon glyphicon-ok',
invalid: 'glyphicon glyphicon-remove',
validating: 'glyphicon glyphicon-refresh'
},
fields:{
username:{
validators:{
notEmpty:{
message:'用户名不能为空'
}
}
},
pwd:{
validators:{
notEmpty:{
message:'请输入密码'
}
}
}
},
});
});
~~~
好了,到这里就写完了,当然这里只是一些基本用法,它还有其他更强大的功能,比如异步验证(和服务器端通信验证),网上教程很多,这里就不再赘述。