通常,我们会将自动验证与自动填充规则写入模型类里,然后再用 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 方法时)时也能实现自动验证与自动填充功能。