我所用到的yii自帶的行爲有這麼幾種:
- yii\behaviors\BlameableBehavior : 使用當前用戶 ID 自動填充指定的屬性
- yii\behaviors\TimestampBehavior: 自動把時間戳填充指定的屬性
- yii\behaviors\AttributeBehavior: 在發生特定事件時自動爲 ActiveRecord 對象的一個或多個屬性 指定一個指定的值
- yii\behaviors\SluggableBehavior: 自動填充指定的屬性,其值可以在 URL 中用作 slug
還用到一些其他的擴展行爲:
- yii2tech\ar\position\PositionBehavior: 允許通過提供重新排序方法來 管理整數字段中的記錄順序
- PinyinBehavior: 自動填充指定的屬性, 可把指定屬性中的漢字翻譯成拼音
現在,針對以上幾種行爲,進行解說:
*BlameableBehavior:使用當前用戶 ID 自動填充指定的屬性,有如下幾種表示:
<?php
use yii\behaviors\BlameableBehavior;
public function behaviors()
{
return [
// 匿名行爲, 只有行爲類名,這樣寫了之後,所有的一切都要遵循BlameableBehavior的要求
BlameableBehavior::class,
];
}
?>
<?php
use yii\behaviors\BlameableBehavior;
public function behaviors()
{
return [
[ // 匿名行爲, 配置數組
'class' => BlameableBehavior::class, // 行爲類
'attributes' => [
// 當insert時,自動把當前用戶ID自動填充指定的屬性(createdBy),
// 當然, 以下鍵值也可以是數組,
// eg: ActiveRecord::EVENT_BEFORE_INSERT => ['createdBy', 'updatedBy'],
ActiveRecord::EVENT_BEFORE_INSERT => 'createdBy',
// 當update時,自動把當前用戶ID自動填充指定的屬性(updatedBy)
ActiveRecord::EVENT_BEFORE_UPDATE => 'updatedBy',
],
],
];
}
?>
<?php
use yii\behaviors\BlameableBehavior;
public function behaviors()
{
return [
[ // 匿名行爲, 配置數組
'class' => BlameableBehavior::class, // 行爲類
// 修改更新時 當前用戶ID填充的屬性: 當修改時,把當前用戶ID填充給deleted_at
// 該屬性可根據自己數據表的設計動態更改
'updatedAtAttribute' => 'deleted_at',
// 如果數據表中沒有updatedBy字段,則可定義updatedByAttribute爲false
// 'updatedByAttribute' => false
'createdByAttribute' => 'createdBy', // 同上
],
];
}
?>
<?php
use yii\behaviors\BlameableBehavior;
public function behaviors()
{
return [
[ // 匿名行爲, 配置數組
'class' => BlameableBehavior::class, // 行爲類
// 傳遞的值, 默認情況下是當前用戶ID, 如果定義了value,則使用當前定義的value值
'value' => function($event) { // 匿名函數方式
// 自動填充值: 可在這裏定義相應的數據
return '#' . $this->id
},
// value格式還可以是這樣: 'value' => '#' . $this->id
],
];
}
?>
*以上可視情況綜合使用
下一篇: 對yii2 內置的behavior理解(TimestampBehavior篇)