ThinkPHP 前台视图实现类似于Yii的自动验证
ThinkPHP model类其实自带这个功能 可以写一个基础类继承Model
模型层代码:
<?php
namespace Manager\Model;
use Think\Model;
class BaseModel extends Model {
public function autoValidation($data,$type) {
if(false === $this->options['validate'] ){
// 关闭自动验证
return true;
}
if(!empty($this->options['validate'])) {
$_validate = $this->options['validate'];
unset($this->options['validate']);
}elseif(!empty($this->_validate)){
$_validate = $this->_validate;
}
// 属性验证
if(isset($_validate)) { // 如果设置了数据自动验证则进行数据验证
if($this->patchValidate) { // 重置验证错误信息
$this->error = array();
}
foreach($_validate as $key=>$val) {
// 验证因子定义格式
// array(field,rule,message,condition,type,when,params)
// 判断是否需要执行验证
if(empty($val[5]) || ( $val[5]== self::MODEL_BOTH && $type < 3 ) || $val[5]== $type ) {
if(0==strpos($val[2],'{%') && strpos($val[2],'}'))
// 支持提示信息的多语言 使用 {%语言定义} 方式
$val[2] = L(substr($val[2],2,-1));
$val[3] = isset($val[3])?$val[3]:self::EXISTS_VALIDATE;
$val[4] = isset($val[4])?$val[4]:'regex';
// 判断验证条件
switch($val[3]) {
case self::MUST_VALIDATE: // 必须验证 不管表单是否有设置该字段
if(false === $this->_validationField($data,$val))
return false;
break;
case self::VALUE_VALIDATE: // 值不为空的时候才验证
if('' != trim($data[$val[0]]))
if(false === $this->_validationField($data,$val))
return false;
break;
default: // 默认表单存在该字段就验证
if(isset($data[$val[0]]))
if(false === $this->_validationField($data,$val))
return false;
}
}
}
// 批量验证的时候最后返回错误
if(!empty($this->error)) return false;
}
return true;
} }
这个 autoValidation 方法 在Model里本来就有的 但是权限是protected 而我们是想在控制器类中调用 所以这里权限必须是public
控制器代码:
我是写在CommonController里 其他控制器继承Common就可以了
public function checkField($model = null) {
$fieldname = I('fieldname');
$curval = I('curval');
$model = ucfirst($model) ?:ucfirst(CONTROLLER_NAME);
$modelobj = D($model);
if(I('id')) { // 修改数据时验证
$res = $modelobj->autoValidation(array($fieldname=>$curval,'id'=>I('id')),3);
} else { // 新增数据时验证
$res = $modelobj->autoValidation(array($fieldname=>$curval),3);
}
if(!$res) {
$this->ajaxReturn(array('status'=>'error','msg'=>$modelobj->getError()));
} else {
$this->ajaxReturn(array('status'=>'ok','msg'=>'成功'));
}
}
视图层代码:
// 表单验证
$("input").blur(function () {
var fieldname = $(this).attr('name');
var curval = $(this).val();
var id = $("input[name=id]").val();
if(id) {
var postdata = {fieldname:fieldname,curval:curval,id:id};
} else {
var postdata = {fieldname:fieldname,curval:curval};
}
var _this = $(this);
$.ajax({
type:'POST',
data:postdata,
url:'{:U("checkField")}',
success:function (d) {
if(d.status == 'error') {
_this.parent().siblings('.layui-word-aux').html("<i class='iconfont' style='color:red;'></i>"+d.msg);
} else {
_this.parent().siblings('.layui-word-aux').html("<i class='iconfont' style='color:green;'></i>");
}
}
})
})
input表单一旦失去焦点 就会以ajax方式请求控制器里的checkField方法 这个方法刚才在Common控制器里写了 就是用来进行表单验证的
视图层的代码可以根据自己的需求修改
这里需要注意:在编辑数据的页面,一定要传此记录的主键ID,因为有些字段我是要求unique规则唯一验证的 不传主键ID unique规则就会失效 我在视图层进行了简单的判断
ThinkPHP 前台视图实现类似于Yii的自动验证的更多相关文章
- ThinkPHP中create()方法自动验证表单信息
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 原理: create()方法收集表单($_POST)信息并返回,同时触发表单自动验证 ...
- ThinkPhp 3.2 自动验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则 ...
- thinkphp表单自动验证
ThinkPHP框架表单验证 对注册到test表的表单进行验证 在注册之前要对表单进行验证: 用户名非空验证,两次输入密码必须一致即相等验证,年龄在18~50之间即范围验证,邮箱格式正则验证. 自动验 ...
- thinkphp自动验证---$_validate
thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...
- 自动验证是ThinkPHP
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则 ...
- ThinkPHP 自动验证与自动填充无效可能的原因(转)
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...
- <转>thinkphp自动验证无效的问题
新手入门thinkphp,试用自动验证表单输入数据功能,却发现怎么都不能调用自动验证,自动验证无效,原因竟是一个小细节的疏忽,学习一定要细心啊! Action方法: IndexAction下的adds ...
- ThinkPHP 自动验证与自动填充无效可能的原因
原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇 ...
- ThinkPHP自动验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行数据类型.业务规则.安全判断等方面的验证操作.数据验证有两 ...
随机推荐
- IO流程中IO向量iovec
作者:Younger Liu,本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 为了提高从磁盘读取数据到内存的效率,引入了IO向量机制,IO向量即struct ...
- Ionic2 + Angular4 + JSSDK开发中的若干问题汇总
前景 目前微信公众号程序开发已经相当火热,客户要求自己的系统有一个公众号,已经是一个很常见的需要. 使用公众号可以很方便的便于项目干系人查看信息和进行互动,还可以很方便录入一些电脑端不便于录入的数据, ...
- Caffe2 Tutorials[0]
本系列教程包括9个小节,对应Caffe2官网的前9个教程,第10个教程讲的是在安卓下用SqueezeNet进行物体检测,此处不再翻译.另外由于栏主不关注RNN和LSTM,所以栏主不对剩下两个教程翻译. ...
- python 小程序—三级菜单—循环和字典练习
程序中利用多级字典来存储三级菜单, 通过一系列while循环和for循环,实现了三级菜单的查询,选择,退回上级菜单,退出程序几个功能. 缺点:程序语句过于重复,效率低. #-*-coding:utf- ...
- LNMP之编译安装PHP出现的问题
2010年以前,互联网公司最常用的Web服务组合就是LAMP(即Linux.Apache.MySQL.PHP),近几年随着Nginx Web服务的逐渐流行,又出现了新的Web服务环境组合--LNMP ...
- SSH 远程执行任务
SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进 ...
- maven的三大生命周期
一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...
- [笔记]cin、cout与scanf、printf的效率差异对比分析
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
- Tomcat--各个目录详解(二)
Tomcat整体目录: 一.bin文件(存放启动和关闭tomcat脚本) 其中.bat和.sh文件很多都是成对出现的,作用是一样的,一个是Windows的,一个是Linux. ① startup文件: ...
- JEESZ分布式框架简介
声明:该框架面向企业,是大型互联网分布式企业架构,后期会介绍Linux上部署高可用集群项目. 项目基础功能截图(自提供了最小部分) 介绍 1. 项目核心代码结构截图 <modules& ...