自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析。 create() 1、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)。 […]
飞自由,点点滴滴,从基础开始—PHP技术博客
转载请注明:爱开源 » ThinkPHP自动验证与自动填充无效可能出现的原因