鉴于之前博客中一直都没有验证器这块的教程,而且偶然发现用的东西还比较多,所以这里我们就直接写一篇教程,带大家领悟下TP5中验证器的使用(当然这个东西会了,laravel下的使用时差不多的方式,下面我们就开始今天的验证器。
首次我们先使用独立验证(即不需要在模块目录下创建验证文件夹,如下:
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/9/27 0027
* Time: 00:50
*/
namespace app\index\controller;
use think\Controller;
use think\Validate;
class User extends Controller
{
/**
* 验证器中的独立验证使用
* 独立验证实际上的意思就是说,你单独拿出来使用,不用在模块目录下创建验证目录
* 官方手册中说 任何时候,都可以使用Validate类进行独立的验证操作
* 这里我的理解是,只要引用了这个类,那么大家都可以在控制层或者模型层使用它。
*/
/**
* 所以第一步我们需要在命名空间namespace 下面引入验证类Validate
* 下面我新建一个公共的方法index 并使用独立验证
*/
public function index(){
return $this->fetch();
}
public function infomation(){
/**
* 实例化验证类
* 传入一个数组
*
* 键-值 require的意思是必填的意思,
* max的意思为最长只能为25个长度
* 想要添加多个验证条件数线( | )分隔即可
*
* 内置了email验证格式,所以直接 email验证条件即可
*/
$validate=new Validate(
[
'name'=>'require|max:25',
'email'=>'email',
]
);
/**
* 接收到的数据,比如是form表单提交的
* 或者ajax提交的数据,官方手册中 是直接赋予了值,
* 获取接收到的值,你可以使用input()方法或者request()方法亦可
* 像下面这样
*/
$data=[
'name'=>input('post.name'),
'email'=>input('post.email'),
];
/**
* 判断验证结果
* 验证结果可以直接调用check()方法
*
* 下面的意思是如果验证失败
* 打印错误信息 获取错误信息可以直接实例验证类调用getError()方法即可
*/
if(!$validate->check($data)){
dump($validate->getError());
}else{
return "验证成功";
}
}
}
视图层代码(View层):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>主页</title>
<script type="application/javascript" src="__JS__/jquery.js"></script>
<link rel="stylesheet" type="text/css" href="__STATIC__/bootstrap/css/bootstrap.min.css"/>
<script type="application/javascript" src="__STATIC__/bootstrap/js/bootstrap.min.js"></script>
<script type="application/javascript" src="__STATIC__/vue/vue.js"></script>
</head>
<body>
<h1>validate</h1>
<form action="{:url('index/User/infomation')}" method="post">
<input type="text" name="name" placeholder="name">
<input type="text" name="email" placeholder="email">
<input type="submit" value="提交">
</form>
</body>
</html>
默认第一次的页面是这样子的,如下图:
然后我们在input框中输入name值和email值 :
我们先不输入name值,邮箱输入正确的格式会出现如下的样子:
当然这里如果我们填入正确的格式值,页面会返回我们验证成功的字样(这里的验证字段信息是我在控制层直接return的),像这样子的页面,当然在实际生产环境中你们可以直接重定向到指定的页面下。
下面我们使用验证器方式:
首先我们需要在模块目录下创建validate目录,然后在此目录下创建验证器文件
下面是验证层验证器的代码:
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/9/27 0027
* Time: 01:59
*/
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
/**
* 继承验证器类 think\Validate
*/
/**
* 定义受保护的属性 $rule 为一个数组格式(也就是验证规则信息)
* 注意属性变量名称这里一定更要一致哦
* 像下面这样我们就定义好了一个最简单的验证器
* 然后我们在需要的地方去调用这个验证器 User,比如控制层Controller
*/
protected $rule=[
'name'=>'require|max:25',
'email'=>'email',
];
}
下面是视图层(View层)代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>主页</title>
<script type="application/javascript" src="__JS__/jquery.js"></script>
<link rel="stylesheet" type="text/css" href="__STATIC__/bootstrap/css/bootstrap.min.css"/>
<script type="application/javascript" src="__STATIC__/bootstrap/js/bootstrap.min.js"></script>
<script type="application/javascript" src="__STATIC__/vue/vue.js"></script>
</head>
<body>
<h1>validate</h1>
<form action="{:url('index/User/lists')}" method="post">
<input type="text" name="name" placeholder="name">
<input type="text" name="email" placeholder="email">
<input type="submit" value="提交">
</form>
</body>
</html>
这里只是简单了修改了我们form表单提交的action地址。
下面是控制层(Controller层)代码 :
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/9/27 0027
* Time: 00:50
*/
namespace app\index\controller;
use think\Controller;
use think\Loader;
use think\Validate;
class User extends Controller
{
/**
* 验证器中的独立验证使用
* 独立验证实际上的意思就是说,你单独拿出来使用,不用在模块目录下创建验证目录
* 官方手册中说 任何时候,都可以使用Validate类进行独立的验证操作
* 这里我的理解是,只要引用了这个类,那么大家都可以在控制层或者模型层使用它。
*/
/**
* 所以第一步我们需要在命名空间namespace 下面引入验证类Validate
* 下面我新建一个公共的方法index 并使用独立验证
*/
public function index(){
return $this->fetch();
}
public function infomation(){
/**
* 实例化验证类
* 传入一个数组
*
* 键-值 require的意思是必填的意思,
* max的意思为最长只能为25个长度
* 想要添加多个验证条件数线( | )分隔即可
*
* 内置了email验证格式,所以直接 email验证条件即可
*/
$validate=new Validate(
[
'name'=>'require|max:25',
'email'=>'email',
]
);
/**
* 接收到的数据,比如是form表单提交的
* 或者ajax提交的数据,官方手册中 是直接赋予了值,
* 获取接收到的值,你可以使用input()方法或者request()方法亦可
* 像下面这样
*/
$data=[
'name'=>input('post.name'),
'email'=>input('post.email'),
];
/**
* 判断验证结果
* 验证结果可以直接调用check()方法
*
* 下面的意思是如果验证失败
* 打印错误信息 获取错误信息可以直接实例验证类调用getError()方法即可
*/
if(!$validate->check($data)){
dump($validate->getError());
}else{
return "验证成功";
}
}
public function lists(){
/**
* 创建一个lists方法
* $data为验证的数据 为一个数组
*/
$data = [
'name'=>input('post.name'),
'email'=>input('post.email')
];
/**
* 静态调用实例中的验证器方法
*/
$validate = Loader::validate('User');
/**
* 或者也可以使用助手函数 validate()函数
* 任意选择一个即可
*/
// $validate = validate('User');
/**
* 同样是调用验证方法check方法
* 判断验证结果
* getError()返回错误信息
*/
if(!$validate->check($data)){
dump($validate->getError());
}else{
return "验证成功";
}
}
}
下面我试一试效果,图如下:
下面是验证成功的样子:
这里独立验证和验证器的使用,剩余的部分大家参照手册即可明白剩余的操作及含义了,如果还有不太明白的地方大家可以在下方留言给我,我收到第一时间回复,最后最近重看无间道3中有这么一句话送给大家:
地藏菩萨本原经卷上: 如是等辈,当堕无间地狱,千万意劫,以此连绵,求无出期。
晚安