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