之前在yii1里
提交数据是
比如我要把 date类型转为int类型
会在 beforesave()里
转换
但是在yii2里
beforeSave(){
$this->date = time()
}
会先走validate的 rule方法
就是说 没有进beforeSave转换之前就先执行了, 那beforeSave还有毛用了
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
回复内容:
之前在yii1里
提交数据是
比如我要把 date类型转为int类型
会在 beforesave()里
转换
但是在yii2里
beforeSave(){
$this->date = time()
}
会先走validate的 rule方法
就是说 没有进beforeSave转换之前就先执行了, 那beforeSave还有毛用了
如果楼主是单纯想要给时间字段赋值,建议在模型里添加如下代码:
然后我再正面回答一下楼主问题,流程如下:
我勒个去,为了画这个流程图,我专门去看了下
的流程图语法。。。一晚上时间就白费了。。。楼主,你要负责
这样写试试:
不知道题主是什么困扰,但是你如果是非得不走
,可以直接在
方法指定
为
RTFM
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#save(...
$model->load()$model->save()$this->date = time()$model->load()$model->save()$this->date = time()phppublic 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
markdownpublic function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
$this->date = time();
return true;
} else {
return false;
}
}
rules()save()$runValidationfalse