入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

ThinkPHP5 表单请求和验证 - 05

创建时间:2017-08-03 投稿人: 浏览次数:874
内置验证规则

框架内置了一些常用的验证规则,基本上可以满足大部分的验证场景,下面列出了内置的验证规则:
验证规则    描述
require    必须验证
alpha       是否为字母
alphaNum    是否为字母和数字
alphaDash    是否为字母、数字,下划线  _及破折号  -
number    是否为数字
integer    是否为整型(注意大小范围)
float    是否为浮点型
boolean    是否为布尔型
email    是否为有效的邮箱格式
array    是否为数组
accepted    是否为  yes、  on或者  1
date    是否为有效的日期格式
activeUrl    是否为有效的IP地址或者域名
url    是否为有效的URL地址
ip    是否为有效的IP地址(支持ipv4和ipv6)
in    是否在某个范围内
notin    是否不在某个范围内
between    是否在某个区间
notBetween    是否不在某个区间
length    长度是否为指定长度或者区间
max    长度最大值
min    长度最小值
after    是否在某个日期之后
before    是否在某个日期之前
expire    是否在某个日期区间
allowIp    请求IP是否是某个值或者范围
denyIp    是否禁止某个或者范围的IP地址
confirm    是否和另外一个字段值相同
different    是否和另外一个字段值不同
>、  >=、  <、  <=、  =    值比较
regex    正则验证
file    是否为一个上传文件
image    是否为一个图像上传文件
fileExt    允许上传的文件后缀
fileMime    允许上传的文件类型
fileSize    上传文件大小限制
unique    验证数据是否在数据表唯一
token    表单令牌验证
内置验证规则中,下面的验证规则不需要和验证字段强制关联,也就是说可以定义在表单的任何一个必填字段上都有效:  token(令牌验证)、  allowIp(允许访问IP)、  denyIp(禁止访问IP)和  expire(表单提交有效期)。
具体每个验证规则的使用请参考官方的完全开发手册验证章节->内置验证规则的用法,不再重复。
自定义验证规则

当内置验证规则无法满足需求的时候,可以自定义验证规则,有两种方式:
最简单的方式是定义验证器的情况,我们可以直接在验证器里面定义新的验证方法,例如:
<?php
namespace appindexvalidate;
use thinkValidate;
class User extends Validate
{
    protected $rule = [
        "name"  => "require|checkName:thinkphp",
        "email" => "email",
    ];
    protected $message = [
        "name"  => "用户名必须",
        "email" => "邮箱格式错误",
    ];
    // 自定义验证规则      
    protected function checkName($value, $rule, $data)
    {
        return $rule == $value ? true : "名称错误";
    }
}


注意,自定义的验证方法并不需要  public,支持的参数包括(按参数顺序排列):
参数名    描述
value    参数值
rule    验证规则
data    表单数据
field    字段名
title    字段描述
自定义验证方法支持的返回值有:
返回值    含义
true    验证通过
false    验证失败,使用规则里面定义的错误信息
其它    验证失败,返回值就是错误信息或者数组
控制器测试代码如下:
<?php

namespace appindexcontroller;

use thinkController;
use thinkRequest;

class Index extends Controller
{
    public function index(Request $request)
    {
        // 验证表单数据
        $result = $this->validate($request->param(), "User");
        if (true !== $result) {
            // 验证失败 输出错误信息
            return "数据验证失败:" . $result;
        }
        else
        {
            return "数据验证通过!";
        }
    }
}

通过postman测试结果:
最终返回的验证失败的错误信息是checkName自定义验证方法里面返回的错误信息,而不是验证规则里面定义的错误。





声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。