ThinkPHP3.2.3自动完成的静态定义:
预先在模型类里面定义好自动完成的规则,我们称之为静态定义。例如,我们在模型类定义_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(); // 生成数据对象 $User->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字段编辑的时候留空则忽略。