ThinkPHP 自动验证与自动填充无效可能的原因
原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析。
create()
ThinkPHP 自动验证与自动填充是在创建数据对象 create() 时实现的,因此自动验证与自动填充无效很大程度上与 create() 有关。
create 方法语法如下:
create(mixed data, string type)
data 表示接受的数据,type 表示本次的具体操作(写入还是更新数据)。两个参数都可省略,data 参数省略的情况下默认为接受 $_POST 数据,而 type 默认情况下由系统自动识别。
但系统自动识别 type 是有缺陷的,当传入的字段有主键字段时,系统就识别为更新操作,否则就是写入操作。所以当主键字段非自动增长而是需要 SQL 写入时,那么自动验证和自动填充都可能无效。
例如添加数据记录时,如果表单中有主键字段或者系统中产生了主键字段(如录入设备编号),那么 ThinkPHP 就认为本次操作为更新操作,对于例如下面设定的自动验证和填充都会略过:
protected $_validate = array(
// 新增时验证标题唯一
array('title','','标题已经存在!',0,'unique',1),
}; // 自动填充
protected $_auto = array(
// 新增时填充时间戳
array('pubtime','time',1,'function'),
);
尽管在操作中,执行了 add() 操作将数据写入了数据表,但这时会发现自动验证与自动填充无效。
出现这种情况时,只需将操作类型显式的传入 create() 方法即可,即 create($_POST,1),告诉系统本次操作为写入数据。另外如果传入的数据不是 $_POST ,也要将数据当作参数传入,如 create($_GET)。
字段未对应
由于粗心,未对应好表单字段与数据表字段。
数据表字段做了更改
在开发过程中,更改了表字段名称,而缓存未及时更新,导致系统判断为无效字段而被 unset 掉。所以在更改了表字段名称之后,及时将 Runtime/Data 下的数据表缓存清除。
Model 命名错误
Model 命名错误,未严格按照规范命名,如头字母未大写或粗心导致字母顺序不对,多或少字母等。这等错误往往会直接导致模型失效。
M 方法中使用自动验证与自动完成
一般情况下,使用 M 方法实例化模型时,是无法实例化自定义模型类的,也就无法使用自动验证与自动完成功能,因此建议使用 D 方法来实例化模型类。如果必须要在 M 方法中实现自动验证或自动完成,参看《ThinkPHP 使用M方法(不创建模型类)时实现自动验证与自动填充》。
ThinkPHP 自动验证与自动填充无效可能的原因的更多相关文章
- ThinkPHP 自动验证与自动填充无效可能的原因(转)
自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析. create() Think ...
- ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)
原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password ...
- thinkphp自动验证和自动完成
tp验证码的自动验证小案例 模板文件 <form action="" method="post"> <p> User: <inpu ...
- 把myeclipse的自动验证和自动构建都关掉
关闭自动构建: project - -build automatically 的勾去掉,如下图: 关闭自动验证:window - preferences-- myeclipse -- valida ...
- <转>thinkphp自动验证无效的问题
新手入门thinkphp,试用自动验证表单输入数据功能,却发现怎么都不能调用自动验证,自动验证无效,原因竟是一个小细节的疏忽,学习一定要细心啊! Action方法: IndexAction下的adds ...
- thinkphp自动验证无效的问题
新手入门thinkphp,试用自动验证表单输入数据功能,却发现怎么都不能调用自动验证,自动验证无效,原因竟是一个小细节的疏忽,学习一定要细心啊! Action方法: IndexAction下的adds ...
- ThinkPHP - 自动创建 + 自动验证 + 自动完成
自动创建:创建数据模型. $User->create(); 自动验证:验证提交的表单数据. protected $_validate = array( array('verify','requi ...
- thinkphp在模型中自动完成session赋值
相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比 如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值 然后自动赋值的功能,具体看代码:clas ...
- ThinkPhp 3.2 自动验证
自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 数据验证有两种方式: 静态方式:在模型类里面通过$_validate属性定义验证规则 ...
随机推荐
- Django中的Model(表结构)
Model(表设计) 在这里只提经常用到的三种联表结构: 一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.O ...
- 【转载】nginx 并发数问题思考:worker_connections,worker_processes与 max clients
注:这个文章主要是作者一直在研究nginx作为http server和反向代理服务器时候所谓最大的max_clients和 worker_connections的计算公式, 其实最后的结论也没有卡上公 ...
- mysql inner join,full outer join,left join,right jion
https://sites.google.com/site/349624yu/courses/mysql/mysqldbgjzcx inner join,full outer join,left jo ...
- 10881 - Piotr's Ants(排序)
题目链接:10881 - Piotr's Ants 题目大意:在一个长为L的木棒上有n只蚂蚁,给出蚂蚁的初始位置以及方向,问说移动T秒后各个蚂蚁的位置以及状态,如果两只蚂蚁在移动的过程中相撞,则会同时 ...
- DevExpress 控件 GridControl常见用法
刚接触DevExpress第三方控件,把GridControl的常见用法整理一下,以供参考: 说明: gcTest GridControl gvText GridView //隐藏最上面的G ...
- php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面
一.什么是静态页面?什么是动态页面 静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页.不能 静态页面 动态页面 区别: ...
- JSON 和 JSONP
本文转载:http://www.cnblogs.com/shanyou/archive/2009/12/13/1623163.html JSON 和 JSONP 浏览器安全模型规定,XMLHttpR ...
- (转载)Linux下安装配置MySQL+Apache+PHP+WordPress的详细笔记
Linux下安装配置MySQL+Apache+PHP+WordPress的详细笔记 Linux下配LMAP环境,花了我好几天的时间.之前没有配置过,网上的安装资料比较混乱,加上我用的版本问题,安装过程 ...
- linux ptrace I
这几天通过<游戏安全--手游安全技术入门这本书>了解到linux系统中ptrace()这个函数可以实现外挂功能,于是在ubuntu 16.04 x86_64系统上对这个函数进行了学习. 参 ...
- Objective-C:KVO
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...