ThinkPHP 自动填充

ThinkPHP 内置了数据对象的自动填充功能,可以用来处理默认值、数据过滤以及其他系统写入字段的自动处理。

要使用自动填充功能,只需要在对应的 Model类 里面定义 $_auto 属性(由多个验证因子组成的数组)。$_auto 属性是由多个填充因子组成的数组,语法格式如下:

protected $_auto = array(

array(填充字段,填充内容[,填充条件][,附加规则])

};

ThinkPHP自动填充格式说明:

填充因子

说明

填充字段

必须。需要填充的表单字段,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如验证码等。

填充内容

必须。要对字段自动填充的内容。

填充条件

可选。包括:

Model:: MODEL_INSERT 或者 1 :新增数据时候填充(默认)

Model:: MODEL_UPDATE 或者 2 :更新数据时候填充

Model:: MODEL_BOTH 或者 3 :全部情况下填充

附加规则

可选。包括:

string:字符串,表示填充内容为字符串(默认)

function:使用函数,表示填充的内容是一个函数返回值

callback:使用方法,表示填充的内容是一个当前 Model 的方法返回值

field:字段,表示填充的内容是一个其他字段的值

自动填充例子

用户注册或修改资料时,可能用到的自动填充例子:

class UserModel extends Model{

protected $_auto = array (

// 新增的时候把status字段设置为1

array('status','1'),

// 对password字段在所有情况下使用md5函数处理

array('password','md5',3,'function'),

// 对username字段在新增时回调getName方法

array('username','getName',1,'callback'),

// 对regdate字段在新增时写入当前时间戳

array('regdate','time',1,'function'),

// 对regip字段在新增时写入用户注册IP地址

array('regip','get_client_ip',1,'function'),

);

}

和自动验证一样,自动完成机制需要使用 create 方法才能生效:

$Article = D("User");

if(!$User->create()){

// 如果创建数据对象失败(可能是验证未通过等),输出错误提示信息

exit($Article->getError());

}else{

// 继续下一步流程如将数据写入数据表

}

提示

与自动验证不同的是,自动填充无效时(如调用一个不存在的函数或自动填充的字段不存在等)并不导致创建数据对象(create())失败,只能通过调试或实际数据入库来检测自动填充是否正确有效。

动态改变自动完成规则

和自动验证一样,可以在操作方法中使用 setProperty方法 动态的更改自动完成的规则:

$Dao = D("User");

$auto = array (

// 仅对password字段进行处理

array('password','md5',1,'function')

);

$User->setProperty("_auto",$auto);

if(!$User->create()){

……

}

M方法中使用自动填充功能

充分利用功能强大的 ThinkPHP 自动填充(自动完成)功能,能够快捷简便的构建表单入库数据,程序结构也会更加明晰。

php怎么弄自动填充,ThinkPHP 自动填充(自动完成)详解及实例相关推荐

  1. ThinkPHP redirect 页面重定向使用详解与实例

    ThinkPHP redirect 方法 ThinkPHP redirect 方法可以实现页面的重定向(跳转)功能.redirect 方法语法如下: $this->redirect(string ...

  2. 我的世界服务器怎么弄自动钓鱼,我的世界自动钓鱼机制作教程 图文步骤详解...

    之前有玩家跟我问过自动钓鱼机的事,所以这里就跟大家分享一个简易的自动钓鱼机,全自动的钓鱼机我也不知道怎么做,网上的很多教程也是看不懂,所以这里就发一个肯定能用的自动钓鱼机. 我的世界自动钓鱼机红石制作 ...

  3. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to Entities 使用LINQ to Entities操作实体 L ...

  4. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解...

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...

  5. 饥荒怎么自动订阅服务器,饥荒联机版自动挂礼物mod及使用方法详解

    饥荒联机版中官方经常会推出一些挂机掉落礼物的活动,可能一些玩家会觉得很麻烦,下面给大家分享一些自动挂礼物mod和其使用方法,希望可以帮助到各位玩家. 饥荒联机版自动挂礼物mod及使用方法详解 挂礼物m ...

  6. pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失标签、插值填充详解及实例

    pandas dataframe缺失值(np.nan)处理:识别缺失情况.删除.0值填补.均值填补.中位数填补.加缺失标签.插值填充详解及实例 isnull().natna().isna().fill ...

  7. OpenCV实现FloodFill泛洪填充算法的代码及相关函数详解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 FloodFill泛洪填充算法是在很多图形绘制软 ...

  8. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...

    本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太 ...

  9. vue webpack 自动打开页面_vue中webpack技术详解

    1.为什么要使用webpack: 因为我们想把资源整合.如在项目index.html文件中为了请求变得更少我们可以新建一个叫main.js的项目入口文件(里面有引用其它的各种资源,而index.htm ...

最新文章

  1. SRAM(静态随机存储器)
  2. 图解Javascript——作用域、作用域链、闭包
  3. python入门实践19章_Python 编程从入门到实践 第19章 注销一节问题
  4. python库之pandas
  5. iPhone 13 的十大爆料:“十三”到底“香不香”?
  6. 在Android平台上发现新的恶意程序伪装成杀毒软件挟持设备
  7. zabbix监控 nginx 进程
  8. fisco bcos transaction交易结构 源代码位置
  9. K均值聚类算法以及模糊K均值算法研究,matlab
  10. 图像处理农业应用sci_SCI征稿通知
  11. win的反义词_小学英语常用近义词、反义词、同音词汇总 ~~~ 赶紧转给孩子
  12. 程序员的自我修养之数学基础11:期望、方差、常见分布(均匀分布、二项分布、泊松分布、正态分布)
  13. 对团队中“这是某某某的问题”引起的思考
  14. python-spider个人笔记
  15. 图书馆抢座系统(python) 附源码
  16. 【Python 文件粉碎工具】——用python制作一款可以粉碎文件的软件工具,用文件恢复工具都找不回来,非常可靠
  17. recovery/removal time
  18. maven 私服setting配置
  19. DirectX12 3D游戏开发实践(龙书)第一章 向量代数
  20. Nginx的access.log日志分析工具-goaccess

热门文章

  1. C语言头文件深入理解
  2. php sprintf u,PHP sprintf()格式化用法详解
  3. mysql空密码php_WAMP中如何修改mysql默认空密码_MySQL
  4. mysql年份_【数据库_Mysql】查询当前年份的sql
  5. Mysql基础--常见的表的约束介绍(一)
  6. Echarts开源可视化库学习(一) 介绍与快速上手
  7. 全面讲解Python列表数组(三)列表数组类型的内置函数方法
  8. python 的dict的append()?
  9. java 动态创建实例_java – 有没有办法动态创建类(而不是实例)?
  10. 怎么设置滚轮拖动_解决三斜线表头一拖动就变形的问题,再也不用一次一次的调整了...