当前位置: 首页 > news >正文

如何使用thinkphp的model来验证前端表单?

为了增加安全性, 在向model表中写入和修改数据时, 最好是调用 create方法来保证安全, 然后再调用add和save方法:

if($Model->Validate($validate)->create()){
...
$Model->add(..); || $Model->save(...);
...
}else{
$Model->getError(..);

}

关于类的定义中的const?

类中的常量通常用const常量, 而且是大写的来表示, 使用时, 采用self::CONSTANT_NAME, 如:

class Model {
    // 操作状态
    const MODEL_INSERT          =   1;      //  插入模型数据
    const MODEL_UPDATE          =   2;      //  更新模型数据
    const MODEL_BOTH            =   3;      //  包含上面两种方式
    const MUST_VALIDATE         =   1;      // 必须验证
    const EXISTS_VALIDATE       =   0;      // 表单存在字段则验证
    const VALUE_VALIDATE        =   2;      // 表单值不为空则验证

在Application的Model文件夹中, 通常没有自定义的模型类, 因为, 你没有自定义的, 自己需要的对 表->表单 的自动验证, 自动完成等功能, 你可以直接使用Model类自己直接提供的方法和常量, 包括add, save, self::EXISTS_VALIDATE等都可以在app的模型中直接 使用, 但是如同跟其他类的继承的使用方法, 如要在继承的子类中定义自己的验证方法, 则要 "覆盖"override父类的这些成员属性:

// 实际上, 这些属性本身都是父类自己所具有的,  只是为空, 所以在子类中,只是重写 override这些父类的属性...
    protected $_validate        =   array();  // 自动验证定义
    protected $_auto            =   array();  // 自动完成定义
    protected $_map             =   array();  // 字段映射定义
    protected $_scope           =   array();  // 命名范围定义
    // 是否自动检测数据表字段信息

验证规则的写法:

$_validate = array(
    array('验证字段1', 验证规则, '错误提示', [验证条件, 附加规则, 验证时间] ),
    array(验证字段2, 验证规则, 错误提示, [验证条件, 附加规则, 验证时间] ),
    array(验证字段3, 验证规则, 错误提示, [验证条件, 附加规则, 验证时间] ),...
);

// 验证字段, 一定要加引号的;
// 验证规则, 是自己写的, 如 数字, 数组, 字符串等等, 当然, 你也可以使用 tp内置的验证规则, 包括: require,number, email, url,currency等,到底有多少内置的验证规则, 看源代码就知道了: 实际上, 你还可以指定 整数, 双精度数字, 英文字符: interger, 'double', 'english'...

821299-20170401104306633-2067744033.png

// 附加的验证规则, 是对前面的验证规则的一个 "说明/补充"...如: function, callback, regex, in, notin, between, notbetween, length(前面的验证规则表示输入的字符串的长度个数),
主要是以下几个的说明:

  • confirm: 是对当前验证字段, 和前面的某个字段, 是否是一样的,
  • unique: 就是验证输入的字段值,在当前表中,是否是唯一的, 即是否已经有同样的值了, 那么前面的验证规则就应该设置为'' 空;

821299-20170401102201555-1489535073.png

验证的方式,分为静态验证和动态验证, 如果你只是对 前端表单 进行验证, 则不必创建一个专门的UserModel类, 可以使用 Think\Model父类自己就有的validate方法, 这时候, 就可以直接用M方法, 而不必用D方法 (D方法 就等于 new \Home\UserModel();). 此时, 验证规则就是一个普通的数组变量, 不是成员变量: $rules= array(..); $User=M('user'); $User->validate($rules); 这里的$rules不是 $_validate了. 这样做就比较简洁省事...

相关文章:

  • 磁盘文件系统2
  • 201521123009 《Java程序设计》第6周学习总结
  • Java深入 - 深入理解Java集合
  • [转] CSSOM视图模式(CSSOM View Module)相关整理
  • 批处理数字前加0
  • MySQL innodb_table_stats表不存在的解决方法
  • 鬼谷子的局 有感
  • bash脚本总结1:[[:not found 错误
  • Maven(一)-- 基础知识
  • Atitit 数据库视图与表的wrap与层级查询规范
  • 【Foreign】咏叹 [模拟退火]
  • css的伪类选择器的使用
  • 待字闺中之快排单向链表;leetcode之Sort List
  • 打造比Dictionary还要快2倍以上的字查找类
  • nginx调优操作之nginx隐藏其版本号
  • “大数据应用场景”之隔壁老王(连载四)
  • CentOS 7 修改主机名
  • css选择器
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JAVA并发编程--1.基础概念
  • Redash本地开发环境搭建
  • spark本地环境的搭建到运行第一个spark程序
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 初探 Vue 生命周期和钩子函数
  • 反思总结然后整装待发
  • 高程读书笔记 第六章 面向对象程序设计
  • 给github项目添加CI badge
  • 给新手的新浪微博 SDK 集成教程【一】
  • 近期前端发展计划
  • 事件委托的小应用
  • 收藏好这篇,别再只说“数据劫持”了
  • 在Unity中实现一个简单的消息管理器
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 如何用纯 CSS 创作一个货车 loader
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Maven错误Error executing Maven
  • #include<初见C语言之指针(5)>
  • ( 10 )MySQL中的外键
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (正则)提取页面里的img标签
  • .gitignore文件设置了忽略但不生效
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .py文件应该怎样打开?
  • /*在DataTable中更新、删除数据*/
  • /var/spool/postfix/maildrop 下有大量文件
  • @ConditionalOnProperty注解使用说明
  • @RequestParam详解
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [20190401]关于semtimedop函数调用.txt
  • [383] 赎金信 js
  • [AIGC] MySQL存储引擎详解
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [BZOJ 3282] Tree 【LCT】