ThinkPHP 3.1快速入门:自动完成

自动完成是ThinkPHP提供用来完成数据">自动处理和过滤的方法,使用create方法创建数据对象的时候会自动完成数据处理。
因此,在ThinkPHP使用create方法来创建数据对象是更加安全的方式,而不是直接通过add或者save方法实现数据写入。

规则定义

自动完成通常用来完成默认字段写入,安全字段过滤以及业务逻辑的自动处理等,和自动验证的定义方式类似,自动完成的定义也支持静态定义和动态定义两种方式。
静态方式:在模型类里面通过$_auto属性定义处理规则。
动态方式:使用模型类的auto方法动态创建自动处理规则。
两种方式的定义规则都采用:说明
完成字段:(必须)需要进行处理的数据表实际字段名称。
完成规则:(必须)需要处理的规则,配合附加规则完成。
完成时间:(可选)包括:
Model:: MODEL_INSERT或者1 新增数据的时候处理(默认)
Model:: MODEL_UPDATE或者2更新数据的时候处理
Model:: MODEL_BOTH或者3所有情况都进行处理
附加规则:(可选)包括:

function 使用函数,表示填充的内容是一个函数名 callback 回调方法 ,表示填充的内容是一个当前模型的方法 field 用其它字段填充,表示填充的内容是一个其他字段的值 string 字符串(默认方式) array(     array(完成字段1,完成规则,[完成条件,附加规则]),     array(完成字段2,完成规则,[完成条件,附加规则]),     ...... );

静态定义

预先在模型类里面定义好自动完成的规则,我们称之为静态定义。例如,我们在模型类定义_auto属性: 然后,就可以在使用create方法创建数据对象的时候自动处理:如果你没有定义任何自动验证规则的话,则不需要判断create方法的返回值:或者更简单的使用:create方法默认情况下是根据表单提交的post数据生成数据对象,我们也可以根据其他的数据源来生成数据对象,你也可以明确指定当前创建的数据对象自动处理的时间是新增还是编辑数据,例如:create方法的第二个参数就用于指定自动完成规则中的完成时间,也就是说create方法的自动处理规则只会处理符合完成时间的自动完成规则。
create方法在创建数据的时候,已经自动过滤了非数据表字段数据信息,因此不需要担心表单会提交其他的非法字段信息而导致数据对象写入出错,甚至还可以自动过滤不希望用户在表单提交的字段信息(详见字段合法性过滤)。

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字段在更
新的时候写入当前时间戳     ); } $User = D("User"); // 实例化User对象 if (!$User->create()){ // 创建数据对象     // 如果创建失败 表示验证没有通过 输出错误提示信息     exit($User->getError()); }else{     // 验证通过 写入新增数据     $User->add(); } $User = D("User"); // 实例化User对象 $User->create(); // 生成数据对象 $User->add(); // 新增用户数据 $User = D("User"); // 实例化User对象 $User->create()->add(); // 生成数据对象并写入数据 $User = D("User"); // 实例化User对象 $userData = getUserData(); // 通过方法
获取用户数据 $User->create($userData,2); // 根据userData数据创建数据对象,并指定为更新数据 $User->add();

动态完成

除了静态定义之外,我们也可以采用动态完成的方式来解决不同的处理规则。

$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方法创建好数据对象之后,此时的数据对象保存在内存中,因此仍然可以操作数据对象,包括修改或者增加数据对象的值,例如:一旦调用了add方法(或者save方法),创建在内存中的数据对象就会失效,如果希望创建好的数据对象在后面的数据处理中再次调用,可以保存数据对象先,例如:不过要记得,如果你修改了内存中的数据对象并不会自动更新保存的数据对象,因此下面的用法是错误的:上面的代码我们修改了数据对象,但是仍然写入的是之前保存的数据对象,因此对数据对象的更改操作将会无效。

$User = D("User"); // 实例化User对象 $User->create(); // 生成数据对象 $User->status = 2; // 修改数据对象的status属性 $User->register_time = NOW_TIME; // 增加register_time属性 $User->add(); // 新增用户数据 $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);

时间: 2024-10-26 21:27:27

ThinkPHP 3.1快速入门:自动完成的相关文章

ThinkPHP 3.1快速入门:连贯操作

上一篇我们详细描述了查询语言的用法,但是查询语言仅仅解决了查询或者操作条件的问题,更多的配合还需要使用模型提供的连贯操作方法. 介绍 连贯操作可以有效的提高数据存取的代码清晰度和开发效率,并且支持所有的CURD操作,也是ThinkPHP的ORM中的一个亮点.使用也比较简单, 假如我们现在要查询一个User表的满足状态为1的前10条记录,并希望按照用户的创建时间排序 ,代码如下: $User->where('status=1')->order('create_time')->limit(1

ThinkPHP 3.1快速入门:基础

ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持. 目录结构 ThinkPHP最新版本可以在官方网站(http://thinkphp.cn/down/framework.html)或者Github(https://github.com/liu21st/thinkphp/do

ThinkPHP 3.1快速入门:自动验证

自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证. 验证规则 数据验证可以进行http://www.aliyun.com/zixun/aggregation/18278.html">数据类型.业务规则.安全判断等方面的验证操作.数据验证有两种方式:静态方式:在模型类里面通过$_validate属性定义验证规则.动态方式:使用模型类的validate方法动态创建自动验证规则.无论是什么方式,验证规则的定义是统一的规则,定义格式为

ThinkPHP 3.1快速入门:IP地址定位

在WEB应用中,根据IP地址定位和记录相关访问日志也是非常常见的需求,在ThinkPHP中你可以轻松的实现IP地址获取和定位. 获取扩展类库 可以在官网的http://www.thinkphp.cn/extend/223.html下载IP定位扩展类库,或者下载扩展包(http://www.thinkphp.cn/down/253.html)里面也已经包含该扩展类了.如果是单独下载的上传类库,把解压后的IpLocation.class.php 放入ThinkPHP/Extend/Library/O

ThinkPHP 3.1快速入门:多语言

ThinkPHP支持多语言,采用的是语言文件的方式.如果你的应用涉及到多个http://www.aliyun.com/zixun/aggregation/18713.html">语言版本和国际化的支持,那么可以定义相关的语言包文件.任何字符串形式的输出,都可以定义语言常量. 启用多语言 要启用多语言功能,首先要下载多语言行为扩展(http://www.thinkphp.cn/extend/186.html),或者下载官方的完整扩展包(http://www.thinkphp.cn/down/

ThinkPHP 3.1快速入门:行为

行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡.这里指的行为是一个比较抽象的概念,你可以想象成在应用执行过程中的一个动作或者处理,在框架的执行流程中,各个位置都可以有行为产生,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测.多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第

ThinkPHP 3.1快速入门:安全

在http://www.aliyun.com/zixun/aggregation/17799.html">开发过程中,除了确保业务逻辑没有安全隐患外,应该充分了解和利用框架内建的安全机制或者工具来确保应用以及服务器的安全性,下面我们总结下ThinkPHP中涉及到的安全机制. 系统安全 系统安全指ThinkPHP可以配合的服务器的安全部署策略. 应用部署建议 首先,我们建议在条件允许的情况下,把框架目录和项目目录都部署在非WEB访问目录下面,ThinkPHP的访问机制完全支持框架和项目的非W

ThinkPHP 3.1快速入门:控制器高级特性

ThinkPHP的控制器层由核心控制器和业务控制器组成,核心控制器由系统内部的App类完成,负责应用(包括模块和操作)的调度控制,包括HTTP请求拦截和转发.加载配置等,业务控制器则由用户定义的http://www.aliyun.com/zixun/aggregation/16339.html">Action类或者其他控制器类完成.我们通过前面的学习,已经了解了基本的控制器用法,这一篇我们来讲述下控制器的一些特性和高级用法,来探索ThinkPHP控制器的神秘外衣. Action参数绑定 在

ThinkPHP 3.1快速入门:路由

ThinkPHP框架对URL有一定的规范,所以如果你希望定制你的URL格式的话,就需要好好了解下内置的路由功能了,它能让你的URL变得更简洁和有文化. 启用路由 要使用路由功能,前提是你的URL支持PATH_INFO,并且在项目配置文件中开启路由: 'URL_ROUTER_ON'&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;  => true, //开启路由 然后就是配置路由规则了,使用URL_ROUTE_