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 ...
随机推荐
- linux下的$0-n作用
电面的时候回答上来一部分了....呵呵......总结一下!!! $0 Shell本身的文件名 $1-$n 添加到Shell的各参数值.$1是第1参数.$2是第2参数… $$ Shell本身的PID( ...
- asp.net mvc + dapper(ORM框架) + easyui框架简洁的信息管理项目
1.目录结构: 2.效果图: 3.IndexController控制器: using System; using System.Collections; using System.Collection ...
- 蓝牙协议分析(4)_IPv6 Over BLE介绍
1. 前言 蓝牙是个奇葩的家伙:它总是以后来者的身份出现,很喜欢打仗,而且还不落下风(有点像某讯的风格).90年代末期和Wi-Fi的无线标准之争如此,当前和802.15.4系(ZigBee.RF4CE ...
- java知识点归集
将工作中,或者看书的过程中碰到的自己之前没有掌握的知识点进行归纳,暂时就碰到什么写什么,后续有一定量的话进行整理: 1. list实现 相关文章:https://zhuanlan.zhihu.com ...
- CocoaPods 简介
CocoaPods 简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如 Java 语言的 Maven,nodejs 的 npm.随着 iOS 开发者的增多,业界也出现了为 iOS 程序提供 ...
- Using Dispatcher
he following code example shows how you might attempt to update the UI from your task logic. // The ...
- JAVA高级篇(三、JVM编译机制、类加载机制)
一.类的加载过程 JVM将类的加载分为3个步骤: 1.装载(Load) 2.链接(Link) 3.初始化(Initialize) 其中 链接(Link)又分3个步骤,如下图所示: 1) 装载:查找并加 ...
- Spring history&Design Philosophy 简单介绍~
SPRING框架的介绍和历史 Spring Framework是一个开源Java应用程序框架,最初是基于依赖注入(DI)和控制反转(IoC)的原理开发的. Spring Framework已经成长为控 ...
- DP常用模板
递推模板: 从结果往回推,需要设定边界为无穷大,并建立状态转移方程 ;j<n;j++) d[n][j]=a[n][j];///边界处理 ;i>=;i--){ ;j<i;j++)/// ...
- CentOS6.5安装mysql5.7
CentOS6.5安装mysql5.7 查看mysql的安装路径: [root@bogon ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql ...