通常,我们会将自动验证与自动填充规则写入模型类里,然后再用 D 方法实例化模型类来实现对表单的自动验证与自动填充功能。由于 M 方法只是实例化基础模型类而不会去实现模型类里定义的逻辑,因此 M 方法一般情况下是无法完成自动验证与自动填充的。
ThinkPHP 提供的 setProperty 方法,可以动态更改 Model 的属性。在操作中,利用 setProperty 方法便可以在使用 M 方法(不创建模型类)时实现自动验证与自动填充功能。
setProperty 方法是 Model 类的内置方法,用于设置模型的属性值,语法如下:
setProperty(string name, mixed value)
例子:
$Article = M("Article");
// 自动验证规则
$validate = array(
array('title','require','标题不能为空!',1),
array('title','','标题已经存在',0,'unique',1),
array('content','require','内容必须',1),
);
// 自动填充规则
$_auto = array(
// 新增癿时候把 status 字段设置为 1
array('status','1',self::MODEL_INSERT),
// 新增癿时候把 create_time 字段设置为 time() 时间戳
array('create_time','time',self::MODEL_INSERT,'function'),
);
$Article->setProperty("_validate",$validate);
$Article->setProperty('_auto',$auto);
// 创建数据对象
if ($Article->create()){
// 创建数据对象成功,写入数据
$User->add();
}else{
// 创建数据对象失败
exit($Article->getError());
}
要在 M 方法中使用自动验证与自动填充,需要以数据对象的方式(create())写入数据,更多信息参见《ThinkPHP create 方法:表单数据智能写入》。
原则上讲,应该将自动验证与自动填充等逻辑在模型里面来完成,但 ThinkPHP 提供了 setProperty 方法,以方便在其他特殊情况(如使用 M 方法时)时也能实现自动验证与自动填充功能。