php自动验证,ThinkPHP 自动验证及验证规则详解

2023-11-13

ThinkPHP 自动验证

ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证。自动验证是基于数据对象的,而大多情况下数据对象是基于 $_POST表单 (不是绝对的)创建的。

基本的自动验证功能包括:必须字段、email邮箱格式、唯一性、URL地址、数字、两个字段是否相同、是否等于某个值等。

要使用系统的自动验证功能,只需要在对应的 Model类 里面定义 $_validate 属性(由多个验证因子组成的数组),语法如下:

protected $_validate = array(

array(验证字段,验证规则,错误提示[,验证条件][,附加规则][,验证时间])

};

ThinkPHP自动验证格式说明:

验证因子

说明

验证字段

必须。需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如验证码等。

验证规则

必须。要进行验证的规则,需要联合附加规则一起使用。

错误提示

必须。当验证不通过时的提示信息。

验证条件

可选。包括:

Model::EXISTS_TO_VAILIDATE 或者 0 :存在字段就验证(默认)

Model::MUST_TO_VALIDATE 或者 1 :必须验证

Model::VALUE_TO_VAILIDATE 或者 2 :值不为空的时候验证

附加规则

可选。配合验证规则使用,包括:

regex:使用正则进行验证,表示前面定义的验证规则是一个正则表达式(默认)

unique:验证唯一性,系统会根据字段目前的值查询数据库来判断是否存在相同的值

confirm:验证表单中的两个字段是否相同,前面定义的验证规则是一个字段名

equal:验证是否等于某个值,该值由前面的验证规则定义

in:验证是否在某个范围内,前面定义的验证规则必须是一个数组

function:使用函数验证,表示前面定义的验证规则是一个函数名

callback:使用方法验证,前面定义的验证规则是当前 Model 类的一个方法

验证时间

可选。包括:

Model:: MODEL_INSERT 或者 1 :新增数据时候验证

Model:: MODEL_UPDATE 或者 2 :编辑数据时候验证

Model:: MODEL_BOTH 或者 3 :全部情况下验证(默认)

自动验证例子

下面的例子验证文章标题必须填写且检测标题是否已存在:

class ArticleModel extends Model{

protected $_validate = array(

array('title','require','标题不能为空!'),

array('title','','标题已经存在!',0,'unique',1),

};

}

在操作中,当使用 create 方法创建数据对象时会自动进行数据验证操作(当 POST 提交表单处理时):

$Article = D("Article");

if (!$Article->create()){

// 如果创建失败,表示验证没有通过(注:可能原因之一)输出错误提示信息

exit($Article->getError());

}else{

// 验证通过,继续下一步流程如将数据写入数据表

}

系统内置了一些常用正则验证的规则,包括:require(必须)、email(邮箱格式)、url(URL地址)、currency(货币)、number(数字)、qq(QQ号码)、english(英文字符),可以直接使用。

出于用户体验考虑,$Article->getError() 返回的错误提示信息,一般以 Ajax 方式返回,详细参见《ThinkPHP Ajax》。

定义自己的验证规则

当内置的这些验证规则无法满足验证要求是,可以定义自己的验证规则,如要求出生年月以 2000-1-1 格式输入时:

array('birthday','/^d{4}-d{1,2}-d{1,2}$/','出生年月格式错误!'),

可见,只需几行简单的代码,就实现了各种不同方式的表单验证,灵活使用 ThinkPHP 自动验证,可以让开发过程事半功倍。更多自动验证列子,参见本节内容之《ThinkPHP 自动验证实例》。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php自动验证,ThinkPHP 自动验证及验证规则详解 的相关文章

  • Java 封装、继承、多态的理解

    更好的阅读体验 Java 封装 继承 多态的理解 1 封装 封装 就是隐藏对象的属性和实现细节 仅对外提供公共访问方式 让使用者知道的才暴露出来 不需要让使用者知道的全部隐藏起来 封装的好处 避免使用者直接操作属性值 隐藏类的实现细节 让使
  • python函数可变参数问题

    函数参数 必选参数 默认参数 可选参数 关键字参数 1 有默认参数和可变参数 argment def test a b 0 c print a b c test 1 2 运行结果 1 2 由此可以看出参数是按顺序传递的 不管参数是不是有默认
  • wiredtiger java_Mongodb WT_ERROR:非特定的WiredTiger错误,

    我试过这个命令 mongod repair dbpath storageEngine wiredTiger并收到同样的错误 Mongo版本v3 4 9 当我尝试启动指向现在损坏的数据库的mongo时出现错误 E STORAGE initan
  • 科技云报道:5G还未普及,6G已经来了?

    科技云报道原创 2021年 相信大部分人仍在用着4G网络 甚至都没明白什么是5G 就开始听到6G的消息了 近日 国家知识产权局知识产权发展研究中心发布了 6G通信技术专利发展状况报告 对6G关键技术的专利发展情况进行深度解读 报告显示 当前
  • mysql状态下,命令行清空指令

    mysql状态下 命令行清空指令
  • attention机制_【CV中的Attention机制】SelectiveKernelNetworksSE进化版

    前言 SKNet是SENet的加强版 是attention机制中的与SE同等地位的一个模块 可以方便地添加到现有的网络模型中 对分类问题 分割问题有一定的提升 作者 pprp 编辑 BBuf 1 SKNet SKNet是SENet的加强版
  • QT中QLoggingCategory类的作用

    使用前须知 include category 美 k t ri 种类 类别 使用举例 QLoggingCategory setFilterRules QStringLiteral qt modbus true 作用总结 控制打印输出类别和区
  • html5 first child,childfirst

    在html里 firstchild 有什么作用 表示对第一个字对象的引用 如 DIV的子对象 alert document getElementById abc firstChild tagname 返回SPAN alert documen
  • vcruntime140_1.dll丢失的详细解决办法

    今天准备打开CAD跟ps时候 当打开我自己的ps软件后 弹出了一个对话框 内容是 由于找不到vcruntime140 1 dll 无法继续执行代码 重新安装程序可能会解决此问题 我很纳闷 前几天还好好着呢 于是我上网上查了一下 成功解决了问
  • signature=0e936ad5c99bd8d603e71fa74e787bee,JavaScript 的 BASE64 算法 实现 完美解决中文乱码...

    收藏的Base64编码 解码 在一个外国网站看到的 不过对中文不支持 自己加入了escape 对中文也支持了 先用escape 对中文进行编码 然后再进行base64编码 解码时 再加入 对中文进行解码 p gt W3C DTD HTML
  • URL 链接中 #、?、连接符& 分别有什么作用?

    在一个 URL 中可以包含很多的内容 其中不仅仅是包含 26 个英文字母 10 个罗马数字 中文汉字 还可以拥有井号 问号 连接符 等三种最常见的符号 那么这些符号在网站中都有哪些作用呢 文章目录 一 井号 二 问号 三 连接 一 井号 井
  • Qt:十六进制字符串和十六进制互转

    Qt 十六进制字符串和十六进制互转 前言 一 字符串转换十六进制 1 封装函数 2 函数调用示例 二 16进制转换字符串 前言 网上查了不少方式 踩了不少坑 最终这个方式是我目前使用感觉较好的一种 具体出处已经没印象了 这里放出完整代码供大
  • Spring(二)IOC容器的初始化流程

    文章目录 一 Spring 核心容器类 1 1 BeanFactory 1 2 ApplicationContext 1 3 BeanDefinition 二 IOC容器的初始化 2 1 基于Xml的IOC容器的初始化 2 1 1 寻找入口
  • 15个顶级Java多线程面试题及答案

    1 现在有T1 T2 T3三个线程 你怎样保证T2在T1执行完后执行 T3在T2执行完后执行 这个线程问题通常会在第一轮或电话面试阶段被问到 目的是检测你对 join 方法是否熟悉 这个多线程问题比较简单 可以用join方法实现 2 在Ja
  • LLM在放射科学中应用潜力

    本论文在全球范围内评估了 31 个大型语言模型 LLM 在解读放射科报告并从放射学发现中推导出诊断信息 impression 任务上的表现 这是目前已知的对全球 LLM 用于放射科学自然语言处理 NLP 进行的最全面评估之一 该研究通过在这
  • 8款常见的自动化测试开源框架

    在如今开源的时代 我们就不要再闭门造车了 热烈的拥抱开源吧 本文针对性能测试 Web UI 测试 API 测试 数据库测试 接口测试 单元测试等方面 为大家整理了github或码云上优秀的自动化测试开源项目 希望能给大家带来一点帮助 一 性
  • 运维体系的构建

    文章目录 一 前言 二 基础 2 1 项目摸底 2 2 做一个好辅助 2 3 学习业务 2 4 标准与流程 2 5 维护 三 进阶 3 1 系统 服务优化 3 2 工作流程优化 3 3 规矩 3 4 运维管理平台 一 前言 运维的基础工作通
  • php lazy loading,React丨用户体验丨hook版 lazy loading

    我们都知道随着单页应用 bundle 的体积不断增大 会造成首次加载时间过长 白屏时间过长 过程中会加载了我们首页没有必要看到的一些 页面 组件 js文件 所以我们需要对 bundle 文件进行拆分来进行按需加载 懒加载 这里需要用到 we
  • Xilinx FIFO Generator 需要注意RST复位

    Xilinx FIFO Generator 需要注意RST复位 系列文章推荐 Xilinx FIFO Generator 需要注意RST复位 Xilinx FIFO Generator 需要注意Actual Depth Xilinx FIF

随机推荐

  • cvCloneImage()内存泄漏解决方法, cvCloneImage()和cvCopy()的区别

    转自 http blog csdn net stellar0 article details 8741759 cvCloneImage 每次使用时编译器会分配新的内存空间 不会覆盖以前的内容 所以如果在循环中使用内存会迅速减小 每次用完都需
  • Python 计算机视觉(六)—— OpenCV 进行图像量化与采样

    对于信号的采样可以参考我之前的文章 数字信号处理 2 1 采样 对于信号的量化可以参考 数字信号处理 2 4 ADC 中的有限字长效应 在本篇文章中绘图使用到了 matplotlib 库 需要了解学习可以参考我之前写的用来总结这个绘图库的文
  • 一文看懂Spark中reduceByKey 和 groupByKey 的区别

    目录 一 先看结论 二 举例 画图说明 1 实现的功能分别是什么 1 groupByKey 实现 WordCount 2 reduceByKey 实现 WordCount 2 画图解析两种实现方式的区别 1 groupByKey 实现 Wo
  • C++深拷贝与浅拷贝以及写时复制

    深拷贝和浅拷贝的优缺点 看了深拷贝 浅拷贝优缺点 我们知道浅拷贝效率高 但涉及到指针引用等会涉及到指针的多次释放导致悬挂指针 深拷贝 不会造成指针悬挂的问题 但会浪费空间以及效率较低的问题 下面看下用到浅拷贝的情况 include
  • TCP通信发送和接收数据(Socket、ServerSocket)、TCP通信案例

    目录 TCP TCP发送接收数据 发送数据 Socket 接收数据 ServerSocket TCP通信案例1 TCP接收数据后给出反馈案例2 TCP接收数据后给出反馈案例3 TCP接收数据后给出反馈案例4 TCP 概述 TCP通信协议是一
  • C++实现——三子棋游戏

    题目描述 两个人玩三子棋游戏 即在3 3的矩阵上下棋 一个人画叉一个人画圈 谁先出现成行或成列或成对角线三个相同的棋子就算谁赢 编写算法实现 判断给定棋局的状态 用1代表先手 2代表后手 出现的六种状态为 1won 2won x 代表棋局错
  • 爬虫逆向——某建筑市场监管平台的滑块验证码分析

    目录 网址链接 正文 一 思路分析 二 图片处理 三 完整代码 网址链接 aHR0cHM6Ly9nY3htLmh1bmFuanMuZ292LmNuL2RhdGFzZXJ2aWNlLmh0bWw bs64解密可见 正文 注 分步的代码为示例代
  • GD32F103与STM32F103的区别 2021.6.2

    GD32F103和STM32F103区别介绍 关键词Key words GD32F103 STM32F103 摘要Abstract 本文主要是GD32F103和STM32F103区别进行介绍 目录 简介 GD32和STM32的区别 2 1
  • 正交向量 正交矩阵

    如何判断向量正交 内积 对应位置相乘再求和 是内积 卷积 加上滑动窗口 判断向量是否正交 两个向量正交 求其内积 看是否为0 若为零 则正交 在空间上向量垂直就正交 例子 a 1 1 0 b 1 1 0 则内积 a b 1 1 1 1 0
  • Linux教程:如何使用kubeadm从头到尾搭建k8s单节点服务并部署dashboard

    前言 在以往教程中 我们使用的是Minikube快速搭建的k8s服务 但这种方式只能在开发环境中使用 并不推荐生产环境 官方的推荐的方案是采用kubeadm快速搭建 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工
  • 改造vue-element-admin 的登录功能,变成从后台数据库中验证登录

    改造vue element admin 的登录功能 变成从后台数据库中验证登录 首先了解登录时前段需要什么样的数据 要知道vue element admin 这个后台开发模板是集成非常多我们日常开发网站的基本功能 所以我们在改造登录功能的时
  • Leetcode26-28,这几道简单有趣的算法题你都会吗?

    26 删除排序数组中的重复项 题目要求 给定一个排序数组 你需要在原地删除重复出现的元素 使得每个元素只出现一次 返回移除后数组的新长度 不要使用额外的数组空间 你必须在原地修改输入数组并在使用O 1 额外空间的条件下完成 示例1 给定数组
  • flutter GestureDetector onTop 点击反应过慢

    如果你遇到过需要自己定义的带手势的view 发现点击几下可能只响应一次 很有可能是GestureDetector的child没有加背景 有时GestureDetector的child不需要加背景也可以点击 但是只可以点击child显示有内容
  • 几个常用数学知识点

    机器学习跟数学有着紧密的关系 因此掌握一些常用的数学知识点 有助于我们理解某些模型的底层相关原理 1 泰勒公式 2 驻点 极值点 鞍点 拐点 2 1 驻点 在数学 特别在微积分 函数在一点处的一阶导数为零 该点即函数的驻点 Stationa
  • MyBatis中的statementType详解

    在mapper文件中可以使用statementType标记使用什么的对象操作SQL语句 statementType 标记操作SQL的对象 取值说明 1 STATEMENT 直接操作sql 不进行预编译 获取数据 Statement 2 PR
  • 各种酒英文名

    okolehao 夏威夷烧酒 芋薯烧酒 orgeat 杏仁橘花香茶一种用于鸡尾酒和食物中的 含有桔子与杏仁的甜作料 杏仁糖浆 鸡尾酒的一种配料或食品的香料 不含酒精 杏仁桔花香茶 一种不含酒精的清凉甜饮料 ouzo 茴香烈酒 无色 不甜且有
  • 前端中的滴到思

    hping3 c 200000 d 12000 S w 64 p 801 flood rand source IP c 是数据包数量 d 是数据包的大小 S 是数据包的类型 w winsize 默认 64 p 目标网站的端口 flood 开
  • 解决Windows11系统缺少Windows.Data.Pdf.dll文件出现错误问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个Windows
  • nodeJS fs.writeFile 实现文字换行

    写文件遇见需要换行的情况就在需要换行的内容前面加换行符号就阔以了 简单 r n windows n linux r mac 下面是一个复制文件的方法 每次追加时间戳的时候希望他换行 gt appendFile 的时候内容前面加 r n co
  • php自动验证,ThinkPHP 自动验证及验证规则详解

    ThinkPHP 自动验证 ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证 自动验证是基于数据对象的 而大多情况下数据对象是基于 POST表单 不是绝对的 创建的 基本的自动验证功能包括 必须字段 email邮箱格式