自动完成

ThinkPHP自动完成规则详解
本文介绍了ThinkPHP框架中自动完成规则的定义方法,包括静态方式和动态方式,并提供了具体的实现示例。此外还讲解了如何在创建数据对象后进行修改及注意事项。

定义规则

静态方式:在模型类里面通过$_auto属性定义处理规则

动态方式:使用模型类auto方法动态创建自动处理规则

定义规则:

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

静态定义

预先在模型类里面定义好自动完成的规则

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(); // 生成数据对象并写入数据
动态完成

$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);
上面的代码修改了数据对象,但是仍然写入的是之前保存的数据对象,因此对数据对象的更改操作将会无效。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值