84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
之前在yii1里
提交数据是$model->load()$model->save()比如我要把 date类型转为int类型会在 beforesave()里$this->date = time()转换
$model->load()
$model->save()
$this->date = time()
但是在yii2里
beforeSave(){$this->date = time()}
会先走validate的 rule方法
就是说 没有进beforeSave转换之前就先执行了, 那beforeSave还有毛用了
光阴似箭催人老,日月如移越少年。
如果楼主是单纯想要给时间字段赋值,建议在模型里添加如下代码:
phppublic function behaviors() { return [ [ 'class' => TimestampBehavior::className(), 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at','updated_at'], ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at' ], ], }
php
public function behaviors() { return [ [ 'class' => TimestampBehavior::className(), 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at','updated_at'], ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at' ], ], }
然后我再正面回答一下楼主问题,流程如下:
flowst=>start: $model->save(runValidation) e=>end: 整个请求结束 runValidation=>condition: runValidation? beforeValidate=>operation: beforeValidate validate=>operation: validate(rules在这儿执行) afterValidate=>operation: afterValidate beforeSave=>operation: beforeSave save=>operation: save afterSave=>operation: afterSave st->runValidation runValidation(yes,right)->beforeValidate runValidation(no)->beforeSave beforeValidate->validate->afterValidate(left)->beforeSave beforeSave->save->afterSave->e
flow
st=>start: $model->save(runValidation) e=>end: 整个请求结束 runValidation=>condition: runValidation? beforeValidate=>operation: beforeValidate validate=>operation: validate(rules在这儿执行) afterValidate=>operation: afterValidate beforeSave=>operation: beforeSave save=>operation: save afterSave=>operation: afterSave st->runValidation runValidation(yes,right)->beforeValidate runValidation(no)->beforeSave beforeValidate->validate->afterValidate(left)->beforeSave beforeSave->save->afterSave->e
我勒个去,为了画这个流程图,我专门去看了下markdown的流程图语法。。。一晚上时间就白费了。。。楼主,你要负责
markdown
这样写试试:
public function beforeSave($insert) { if (parent::beforeSave($insert)) { $this->date = time(); return true; } else { return false; } }
不知道题主是什么困扰,但是你如果是非得不走rules(),可以直接在save()方法指定$runValidation为false
rules()
save()
$runValidation
false
RTFM
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#save(...
如果楼主是单纯想要给时间字段赋值,建议在模型里添加如下代码:
这样写试试:
不知道题主是什么困扰,但是你如果是非得不走
rules()
,可以直接在save()
方法指定$runValidation
为false
RTFM
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#save(...