最新消息:扫描右侧莎龙博客微信公众账号获取文章访问密码^_^QQ交流群:112302518

ThinkPHP 自动验证与自动填充无效

php编程 莎龙 1569浏览 0评论

D方法要用到的是Model模型类,比如我们要实例化user模型),就需要在Model下创建UserMdoel.class.php

要特别注意此处的文件名是依据模型来写的(也就是TB名),我就是这里搞错了,导致验证时候error()/success()函数失效,找了半天,真恐怖!(写代码时候真得小心啊····一丁点错误就不行······)

如果你也遇到了问题,又不是我遇到的原因,读读下面这个吧:

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 方法来实例化模型类。

转载请注明:莎龙博客2017 » ThinkPHP 自动验证与自动填充无效

  1. 有匹小马要过河,老水牛看到了对他说:“别怕,水很浅,只到了我的膝盖。”小松鼠立刻跑了过来喊道:“不要相信他!水很深,我的朋友就是淹死的。”小马不知道该听谁的,身旁的马妈妈告诉他:“孩子,别理那俩神经病,咱们走桥。” http://www.jfox.info

  2. 我在大连上学,考银行报的江苏南京,来来回回坐飞机四趟航班不到1500,刚买了一张南京到大连飞机票,加上油费195,我爸都不相信机票会这么便宜,南京没有高铁直到大连,有我也做不起,同样的硬座23个小时,210块钱,卧铺320,我只能感谢高铁确实给飞机带来的

  3. 我在大连上学,考银行报的江苏南京,来来回回坐飞机四趟航班不到1500,刚买了一张南京到大连飞机票,加上油费195,我爸都不相信机票会这么便宜,南京没有高铁直到大连,有我也做不起,同样的硬座23个小时,210块钱,卧铺320,我只能感谢高铁确实给飞机带来的

  4. 我在大连上学,考银行报的江苏南京,来来回回坐飞机四趟航班不到1500,刚买了一张南京到大连飞机票,加上油费195,我爸都不相信机票会这么便宜,南京没有高铁直到大连,有我也做不起,同样的硬座23个小时,210块钱,卧铺320,我只能感谢高铁确实给飞机带来的

  5. 如果您看了好几年摔角您就会发现,塞纳很少有虚脱的时候!而且是出勤率最高的。这就是体质。放眼整个WWE实战前3位我是这么排的1.大布 2.塞纳 3.28托 4.HHH 5.送葬者 6.克里斯班瓦,你不要被体形所迷惑了,想想当年的李小龙吧!