TP5 自定义验证器
TP内置验证功能提供两种验证方法
- 验证器(推荐)
 
$validate = Validate::make([
'id' => 'require|integer',
]);
if ($validate->check(['id' => $id])) { }
优点: 方便、快捷
缺点: 可读性和扩展性差
- 独立验证
 
namespace app\admin\validate;
class Banner extends BaseValidate {
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
protected $message = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄只能在1-120之间',
'email' => '邮箱格式错误',
];
protected $scene = [
'edit' => ['name','age'],
];
}
官方提供了一些验证规则,如果不能满足需求可以自定义
建议自定义在验证器基类中,这样所有继承这个类的子验证器都可以使用这些验证方法
定义规则
    protected function isMobile($value) {
        $rule = '^1(3|4|5|7|8)[0-9]\d{8}$^';
        $result = preg_match($rule, $value);
        if ($result) {
            return true;
        } else {
            return false;
        }
    }
自定义验证器有以下几个参数
value:待验证的值
field:验证字段名
验证器推荐使用方法
定义验证器基类,继承 Validate类 ,在基类中定义一些公共验证规则和方法
<?php
namespace app\admin\validate;
use think\Validate; /**
* Class BaseValidate
* 验证类的基类
*/
class BaseValidate extends Validate {
/**
* 检测所有客户端发来的参数是否符合验证类规则
* 基类定义了很多自定义验证方法
* 这些自定义验证方法其实,也可以直接调用
* @throws ParameterException
* @return true
*/
public function goCheck() {
$params = request()->param();
if (!$this->check($params)) {
return $this->error;
}
return true;
} /**
* @param array $arrays 通常传入request.post变量数组
* @return array 按照规则key过滤后的变量数组
* @throws ParameterException
*/
public function getDataByRule($arrays) {
if (array_key_exists('user_id', $arrays) | array_key_exists('uid', $arrays)) {
return '参数中包含有非法的参数名user_id或者uid';
}
$newArray = [];
foreach ($this->rule as $key => $value) {
$newArray[$key] = $arrays[$key];
}
return $newArray;
} protected function isPositiveInteger($value, $rule = '', $data = '', $field = '') {
if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
return true;
}
return $field . '必须是正整数';
} protected function isNotEmpty($value, $rule = '', $data = '', $field = '') {
if (empty($value)) {
return $field . '不允许为空';
} else {
return true;
}
} //没有使用TP的正则验证,集中在一处方便以后修改
//不推荐使用正则,因为复用性太差
//手机号的验证规则
protected function isMobile($value) {
$rule = '^1(3|4|5|7|8)[0-9]\d{8}$^';
$result = preg_match($rule, $value);
if ($result) {
return true;
} else {
return false;
}
} }
TP5 自定义验证器的更多相关文章
- 9、 Struts2验证(声明式验证、自定义验证器)
		
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
 - Angular:Reactive Form的使用方法和自定义验证器
		
本文将介绍Angular(Angular2+)中Reactive Form的有关内容,包括: Reactive Form创建方法 如何使用验证 自定义验证器 下面开始进入正文! Reactive Fo ...
 - Struts(二十五):自定义验证器
		
编程验证 Struts2提供了一个Validateable接口,可以使用Action类实现这个接口以提供编程验证: ActionSupport类已经实现了Validateable接口. public ...
 - flask 自定义验证器(行内验证器、全局验证器)
		
自定义验证器 在WTForms中,验证器是指在定义字段时传入validators参数列表的可调用对象,下面来看下编写自定义验证器. 行内验证器 除了使用WTForms提供的验证器来验证表单字段,我们还 ...
 - thinkphp5.0自定义验证器
		
虽然我早就会些php基础语法,我套过数据,自己写的控制器层,不是用的api方式,那个公司是为了锻炼我,所以才那样做的,基本上的东西都是用的框架自带的,重来自己没有去封装过这些东西,所以编程思想上,还很 ...
 - Flask系列09--Flask中WTForms插件,及自定义验证器
		
一.概述 django中的forms组件非常的方便,在flask中有WTForms的组件实现的也是类似的功能, 安装这个插件 二.简单使用 文档地址https://wtforms.readthedoc ...
 - Angular11 模板表单、响应式表单(自定义验证器)、HTTP、表单元素双向绑定
		
1 模板表单 模型通过指令隐式创建 技巧01:需要在模块级别引入 FormsModule ,通常在共享模块中引入再导出,然后在需要用到 FormsModule 的模块中导入共享模块就可以啦 impor ...
 - ThinkPHP5.0框架开发--第10章 TP5.0验证器
		
ThinkPHP5.0框架开发--第10章 TP5.0验证器 第10章 TP5.0验证器 ======================================= 今日学习 1.验证器 1) 控 ...
 - gin中如何自定义验证器
		
package main import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding&qu ...
 
随机推荐
- effective java——31用实例域代替序数
			
1,永远不要根据枚举的序数导出与它关联的值,而是要将他保存在一个实例域中.(ordinal()) public enum Ensemble { SOLO, DUET, TRIO, QUARTET, Q ...
 - Oracle数据库统一审核的启用测试与关闭
			
环境:windows server 2008.Oracle 12c R2 下面的步骤,连接为sysdba,除非指定了其它方式. (1)运行如下查询,确定统一审核是否启用了: select value ...
 - C#中字符串大小比较函数--CompareTo与Compare方法(需要完善补充)
			
字符串比较的原理是什么? 原理: 从两个字符串的第一个字符开始逐个进行比较(按字符的ASCII值进行大小比较),直到出现不同的字符或遇到‘\0’为止. 如果全部字符都相同,就认为两字符串相等,返回0: ...
 - 我的第一个爬虫程序:利用Python抓取网页上的信息
			
题外话 我第一次听说Python是在大二的时候,那个时候C语言都没有学好,于是就没有心思学其他的编程语言.现在,我的毕业设计要用到爬虫技术,在网上搜索了一下,Python语言在爬虫技术这方面获得一致好 ...
 - Java 8 中常用的函数式接口
			
函数式接口 函数描述符 Predicate<T> T->boolean Consumer<T> T->void Function<T, R> T-> ...
 - 微信小程序 | 多个按钮或VIEW,切换状态的简单方法(三元)
			
wxml文件 wxss文件 js文件
 - memcache 应用场景
			
一..memcache应用场景 1.应用场景一: 缓解数据库压力,提高交互速度.它的一个总原则是将经常需要从数据库读取的数据缓存在memcached中.这些数据也分为几类: (1).经常被读取并且实时 ...
 - Mybatis Update操作返回值问题
			
https://www.cnblogs.com/jpfss/p/8918315.html
 - Python开发 基礎知識   (未完代補)
			
一.Python基本知識 1.Python屬高階語言,所編築的是字節碼 2.一般狀態statement 終止於換行,如需使用多數行編寫,可在行末加上 \,以表延續 但在 parentheses ( ) ...
 - 【SpringBoot】服务器端主动推送SSE技术讲解
			
=====================16.高级篇幅之SpringBoot2.0服务器端主动推送SSE技术讲解 ============================ 1.服务端推送常用技术介绍 ...