之前在yii1里
提交数据是$model->load()$model->save()
比如我要把 date类型转为int类型
会在 beforesave()里 $this->date = time() 转换
但是在yii2里
beforeSave(){
$this->date = time()
}
会先走validate的 rule方法
就是说 没有进beforeSave转换之前就先执行了, 那beforeSave还有毛用了
思乐微信商城微分销系统是以.net+access/mssql进行开发的微信分销系统。基于微信朋友圈的传播,是打造以分销商为中心的全新微信分销体验。让粉丝实时有效的获取朋友圈流量并快速分享购买分佣。因为是基于微信,所以要在微信上体验才更好。关注我们的微信核心功能:1、自动提示用户关注微信,解决一般程序无关注微信公众号的过程2、只要通过链接进一次,不过好久注册,什么方面注册,只要是用微信注册的,都会算
0
之前在yii1里
提交数据是$model->load()$model->save()
比如我要把 date类型转为int类型
会在 beforesave()里 $this->date = time() 转换
但是在yii2里
beforeSave(){
$this->date = time()
}
会先走validate的 rule方法
就是说 没有进beforeSave转换之前就先执行了, 那beforeSave还有毛用了
如果楼主是单纯想要给时间字段赋值,建议在模型里添加如下代码:
php</code><code>public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at','updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at'
],
],
}
然后我再正面回答一下楼主问题,流程如下:
flow</code><code>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的流程图语法。。。一晚上时间就白费了。。。楼主,你要负责
这样写试试:
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
$this->date = time();
return true;
} else {
return false;
}
}
不知道题主是什么困扰,但是你如果是非得不走rules(),可以直接在save()方法指定$runValidation为false
RTFM
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#save(...
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号