之前在使用yii 2.0的时候,我的数据新增是这样的,都是写在了controller里面
xxxController.php
$data = Yii::$app->request->post();
if (empty($data['id'])) {
$model = new Model();
//补充新增的时候需要的数据,例如addtime,status
} else {
//补充更新的时候需要的数据,例如update
$model = Model::findOne($data['id']);
}
$model->attributes = $data;
if ($model->validate()) {
if ($model->save()) {
return true;
}
} else {
return false;
}
这样我就必须在每一个数据新增的时候都写数据的补充,这些代码都是重复的,而且写在controller里面是十分不好的
后面发现了如果我写在model里面,会有不错的效果
xxxModel.php
public function beforeSave($insert) {
if (parent::beforeSave($insert)) {
if ($this->isNewRecord) {
$this->add_time = date('y-m-d H:m:s');
$this->status = 1;
} else {
$this->update_time = date('y-m-d H:m:s');
}
return true;
} else {
return false;
}
}
我只要调用到这里这这个方法,就会在save的时候触发上面的beforeSave,这样就可以完成数据的填充,而且是在数据验证以后再填充,而且最重要的一点,我如果把这些都写在了一个公共的model里面,只有我有数据填充并且是一样的,我就都不用写的,直接用就可以了
public function dataSave($data) {
$this->load($data, '');
if ($this->validate()) {
if ($this->save()) {
return ['code' => '1', 'msg' => '保存成功'];
}
} else {
return ['code' => '0', 'msg' => $this->getFirstErrorsMessage()];
}
return ['code' => '0', 'msg' => '保存失败'];
}