学习Yii2(基础版)中遇到的坑(三)
原作者Blog:Yii2系列教程七:Behaviors And Validations
0.在Yii2系列教程七:Behaviors And Validations中遇到的坑
1.正常情况:
2.我遇到的情况:
原因:
我一直以为是models\Status.php文件里的behaviors()函数写错了。
然后一直找behavior()的相关知识,最后新建了一个model来测试,发现,并不是该函数问题,而是models\Status.php下的 rules()的问题。
解决办法:
models\Status.php的rules函数:
public function rules()
{
return [
//注释掉下面那一行,验证规则不需要检验那四个字段。因为这四个字段由behaviors()这个行为处理了
//当执行$model->save()时,TimestampBehavior这个行为,
//支持在 [[yii\db\ActiveRecord|Active Record]] 存储时自动更新它的时间戳属性。BlameableBehavior同理。
// [['message', 'created_at', 'updated_at','created_by','updated_by'], 'required'],
[['message'], 'required'],
[['message'], 'string'],
[['permissions', 'created_at', 'updated_at','created_by','updated_by'], 'integer'],
];
}
models\Status.php的behaviors()函数:
public function behaviors()
{
//在return的数组当中,
//第一个就是使用Yii2的BlameableBehavior自动完成created_by和updated_by这两个字段,
//至于timestamp这个数组,
//就是使用Yii2的TimestampBehavior来自动完成created_at和updated_at字段,
//并且这会根据数据的BEFORE_INSERT和BEFORE_UPDATE两种情况来自动完成添加。
return [
[
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'created_by',
'updatedByAttribute' => 'updated_by',
],
'timestamp' => [
//'class' => 'yii\behaviors\TimestampBehavior',
'class'=>TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at','updated_at'],
ActiveRecord::EVENT_AFTER_UPDATE => ['updated_at'],
],
],
];
}