YII2中一些通用字段的自动插入–behaviors()行为绑定的简要使用分析

behaviors()主要是用来绑定行为的,所谓绑定行为,就是在执行action的时候回附加添加某些属性。
比如使用最多的就是我们在添加数据时,会有created_time,修改数据时,会有update_time ,用户登录时,会记录最后登录时间;数据库里很多字段都是一些通用有规律的字段,那么我们就可以把这些字段提出来,作为行为绑定来实现,减少代码量。
yii2中自带的行为模型,有五种
  • TimestampBehavior
  • SluggableBehavior
  • BlameableBehavior
  • AttributeTypecastBehavior
  • AttributeBehavior
我们主要讲两个TimestampBehavior和BlameableBehavior
TimestampBehavior的使用
就是跟时间相关的属性
首先在country表中加入created_time和updated_time。
第二步,在模型中定义behaviors。
namespace frontend\models;
use Yii;
use yii\behaviors\TimestampBehavior;
class Country extends \yii\db\ActiveRecord {
...
public function behaviors(){
      return [
                      [
                         'class'=>TimestampBehavior::className(),
                         'attributes'=>[
                                   ActiveRecord::EVENT_BEFORE_INSERT => ['created_time','updated_time'],
                                   ActiveRecord::EVENT_BEFORE_UPDATE => ['update_time'],
                         ]
                      ]
       ];
}
...
}
二、BlameableBehavior的使用
与用户相关的一些属性
在country表中加入创建作者和修改作者。

public function behaviors() {
return [
[
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'creater_id',
'updatedByAttribute' => 'updater_id',
],
];

}

还有一个AttributeBehavior,这个看了一下通用性更强一些,从网上找了一个例子在这里给大家说一下。
我们假设一种场景,还是上面的那个member数据表,我们为其增加一个token字段,该字段的值被数据生成时初始化,值为username的md5值,这个事情在所有member初始化时候都会发生,现在用AttributeBehavior来搞定它。

namespace \models;

use Yii;
use yii\behaviors\AttributeBehavior;
use yii\db\ActiveRecord;

class User extends ActiveRecord {

public function behaviors(){
return [
[
'class' => AttributeBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => 'token',
],
'value' => function ($event) {
return md5($this->username);
},
],
];
}
}

白发渔樵

白发渔樵

发表评论

电子邮件地址不会被公开。 必填项已用*标注