ThinkPHP 自动填充(自动完成)详解及实例
ThinkPHP 自动填充
ThinkPHP 内置了数据对象的自动填充功能,可以用来处理默认值、数据过滤以及其他系统写入字段的自动处理。
要使用自动填充功能,只需要在对应的 Model类 里面定义 $_auto 属性(由多个验证因子组成的数组)。$_auto 属性是由多个填充因子组成的数组,语法格式如下:
protected $_auto = array( array(填充字段,填充内容[,填充条件][,附加规则]) };
填充因子 | 说明 |
---|---|
填充字段 | 必须。需要填充的表单字段,这个字段不一定是数据库字段,也可以是表单的一些辅助字段,例如验证码等。 |
填充内容 | 必须。要对字段自动填充的内容。 |
填充条件 |
可选。包括:
|
附加规则 |
可选。包括:
|
自动填充例子
用户注册或修改资料时,可能用到的自动填充例子:
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()){ …… }
更多可参看《ThinkPHP 自动验证之动态改变验证规则》。
M方法中使用自动填充功能
参见《ThinkPHP 在使用M方法(不创建模型类)时实现自动验证与自动填充》。
充分利用功能强大的 ThinkPHP 自动填充(自动完成)功能,能够快捷简便的构建表单入库数据,程序结构也会更加明晰。