Thinkphp 模型->自动完成
来源:互联网 发布:和炫三维试衣软件 编辑:程序博客网 时间:2024/04/28 21:24
自动完成
自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理。
因此,在ThinkPHP使用create方法来创建数据对象是更加安全的方式,而不是直接通过add或者save方法实现数据写入。
规则定义
自动完成通常用来完成默认字段写入,安全字段过滤以及业务逻辑的自动处理等,和自动验证的定义方式类似,自动完成的定义也支持静态定义和动态定义两种方式。
静态方式:在模型类里面通过$_auto属性定义处理规则。
动态方式:使用模型类的auto方法动态创建自动处理规则。
两种方式的定义规则都采用:
完成字段(必须)
需要进行处理的数据表实际字段名称。
完成规则(必须)
需要处理的规则,配合附加规则完成。
完成时间(可选)
设置自动完成的时间,包括:
附加规则(可选)
包括:
静态定义
预先在模型类里面定义好自动完成的规则,我们称之为静态定义。例如,我们在模型类定义_auto属性:
然后,就可以在使用create方法创建数据对象的时候自动处理:
如果你没有定义任何自动验证规则的话,则不需要判断create方法的返回值:
或者更简单的使用:
create方法的第二个参数就用于指定自动完成规则中的完成时间,也就是说create方法的自动处理规则只会处理符合完成时间的自动完成规则。 create方法在创建数据的时候,已经自动过滤了非数据表字段数据信息,因此不需要担心表单会提交其他的非法字段信息而导致数据对象写入出错,甚至还可以自动过滤不希望用户在表单提交的字段信息(详见字段合法性过滤)。
3.1.2版本开始新增了ignore完成规则,这一规则表示某个字段如果留空的话则忽略,通常可用于修改用户资料时候密码的输入,定义如下:
表示password字段编辑的时候留空则忽略。
动态完成
除了静态定义之外,我们也可以采用动态完成的方式来解决不同的处理规则。
修改数据对象
在使用create方法创建好数据对象之后,此时的数据对象保存在内存中,因此仍然可以操作数据对象,包括修改或者增加数据对象的值,例如:
一旦调用了add方法(或者save方法),创建在内存中的数据对象就会失效,如果希望创建好的数据对象在后面的数据处理中再次调用,可以保存数据对象先,例如:
不过要记得,如果你修改了内存中的数据对象并不会自动更新保存的数据对象,因此下面的用法是错误的:
上面的代码我们修改了数据对象,但是仍然写入的是之前保存的数据对象,因此对数据对象的更改操作将会无效。
自动完成是ThinkPHP提供用来完成数据自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理。
因此,在ThinkPHP使用create方法来创建数据对象是更加安全的方式,而不是直接通过add或者save方法实现数据写入。
规则定义
自动完成通常用来完成默认字段写入,安全字段过滤以及业务逻辑的自动处理等,和自动验证的定义方式类似,自动完成的定义也支持静态定义和动态定义两种方式。
静态方式:在模型类里面通过$_auto属性定义处理规则。
动态方式:使用模型类的auto方法动态创建自动处理规则。
两种方式的定义规则都采用:
array( array(完成字段1,完成规则,[完成条件,附加规则]), array(完成字段2,完成规则,[完成条件,附加规则]), ......);说明
完成字段(必须)
需要进行处理的数据表实际字段名称。
完成规则(必须)
需要处理的规则,配合附加规则完成。
完成时间(可选)
设置自动完成的时间,包括:
附加规则(可选)
包括:
静态定义
预先在模型类里面定义好自动完成的规则,我们称之为静态定义。例如,我们在模型类定义_auto属性:
namespace Home\Model;use Think\Model;class UserModel extends Model{ protected $_auto = array ( array('status','1'), // 新增的时候把status字段设置为1 array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理 array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法 array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳 ); }
然后,就可以在使用create方法创建数据对象的时候自动处理:
$User = D("User"); // 实例化User对象if (!$User->create()){ // 创建数据对象 // 如果创建失败 表示验证没有通过 输出错误提示信息 exit($User->getError()); }else{ // 验证通过 写入新增数据 $User->add(); }
如果你没有定义任何自动验证规则的话,则不需要判断create方法的返回值:
$User = D("User"); // 实例化User对象$User->create(); // 生成数据对象$User->add(); // 新增用户数据
或者更简单的使用:
$User = D("User"); // 实例化User对象$User->create()->add(); // 生成数据对象并写入数据create方法默认情况下是根据表单提交的post数据生成数据对象,我们也可以根据其他的数据源来生成数据对象,你也可以明确指定当前创建的数据对象自动处理的时间是新增还是编辑数据,例如:
$User = D("User"); // 实例化User对象$userData = getUserData(); // 通过方法获取用户数据$User->create($userData,2); // 根据userData数据创建数据对象,并指定为更新数据$User->add();
create方法的第二个参数就用于指定自动完成规则中的完成时间,也就是说create方法的自动处理规则只会处理符合完成时间的自动完成规则。 create方法在创建数据的时候,已经自动过滤了非数据表字段数据信息,因此不需要担心表单会提交其他的非法字段信息而导致数据对象写入出错,甚至还可以自动过滤不希望用户在表单提交的字段信息(详见字段合法性过滤)。
3.1.2版本开始新增了ignore完成规则,这一规则表示某个字段如果留空的话则忽略,通常可用于修改用户资料时候密码的输入,定义如下:
array('password','',2,'ignore')
表示password字段编辑的时候留空则忽略。
动态完成
除了静态定义之外,我们也可以采用动态完成的方式来解决不同的处理规则。
$rules = array ( array('status','1'), // 新增的时候把status字段设置为1 array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理 array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳 ); $User = M('User'); $User->auto($rules)->create()->add();
修改数据对象
在使用create方法创建好数据对象之后,此时的数据对象保存在内存中,因此仍然可以操作数据对象,包括修改或者增加数据对象的值,例如:
$User = D("User"); // 实例化User对象$User->create(); // 生成数据对象$User->status = 2; // 修改数据对象的status属性$User->register_time = NOW_TIME; // 增加register_time属性$User->add(); // 新增用户数据
一旦调用了add方法(或者save方法),创建在内存中的数据对象就会失效,如果希望创建好的数据对象在后面的数据处理中再次调用,可以保存数据对象先,例如:
$User = D("User"); // 实例化User对象$data = $User->create(); // 保存生成的数据对象$User->add();
不过要记得,如果你修改了内存中的数据对象并不会自动更新保存的数据对象,因此下面的用法是错误的:
$User = D("User"); // 实例化User对象$data = $User->create(); // 保存生成的数据对象$User->status = 2; // 修改数据对象的status属性$User->register_time = NOW_TIME; // 增加register_time属性$User->add($data);
上面的代码我们修改了数据对象,但是仍然写入的是之前保存的数据对象,因此对数据对象的更改操作将会无效。
阅读全文
0 0
- Thinkphp 模型->自动完成
- ThinkPHP模型开发之自动完成常见问题
- ThinkPHP 自动完成
- thinkphp之自动完成
- Thinkphp 模型->自动验证
- thinkphp模型$_auto自动完成设置为插入时更新操作也变化的解决办法
- THINKPHP自动验证,自动完成,字段…
- [php] Thinkphp自动验证和自动完成
- ThinkPHP 自动完成 和 自动验证
- thinkphp 自动验证自动完成失效
- thinkphp模型的自动验证
- ThinkPHP 3.1快速入门:自动完成
- model内自动完成session赋值 thinkphp
- 使用thinkphp框架完成表单自动验证
- ThinkPHP注册自动验证及自动完成部分代码参考
- ThinkPHP注册自动验证及自动完成部分代码参考
- ThinkPHP:模型自动验证和处…
- thinkphp自动完成添加操作无效的原因以及解决方案
- IDEA搭建go环境
- 如何在fragment中获取自定义view的控件id
- HDU 1695-GCD(莫比乌斯反演)
- 2017多校训练Contest4: 1005 Lazy Running hdu6071
- Hadoop基础教程-第11章 Hive:SQL on Hadoop(11.8 HQL:排序)(草稿)
- Thinkphp 模型->自动完成
- javascript代码规范问题
- 访问量突破4000
- Android 零碎知识点---2
- java内存模型与volatile关键字
- 【Unity学习笔记】Unity设置单位长度与像素间的对应关系
- 网络编程--UDP
- ZOJ 1134 Strategic Game(非二分图最小顶点覆盖)
- Python爬虫对知乎问题下的图片进行爬取