Class yii\behaviors\AttributeBehavior

继承yii\behaviors\AttributeBehavior » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable
子类yii\behaviors\BlameableBehavior, yii\behaviors\OptimisticLockBehavior, yii\behaviors\SluggableBehavior, yii\behaviors\TimestampBehavior
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/behaviors/AttributeBehavior.php

当某些事件发生时, AttributeBehavior 会自动将指定的值分配给 ActiveRecord 对象的一个或多个属性.

要使用 AttributeBehavior, 请配置 $attributes 属性, 该属性应指定需要更新的属性列表以及应触发更新的相应事件.

然后使用一个 PHP 回调来配置 $value 属性, 其返回值将用于分配给当前属性.

例如:

use yii\behaviors\AttributeBehavior;

public function behaviors()
{
    return [
        [
            'class' => AttributeBehavior::className(),
            'attributes' => [
                ActiveRecord::EVENT_BEFORE_INSERT => 'attribute1',
                ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2',
            ],
            'value' => function ($event) {
                return 'some value';
            },
        ],
    ];
}

由于属性值将由此行为自动设置, 因此它们通常不是用户输入的, 因此不应该被验证, 即它们不应该出现在模型的 rules() 方法.

公共属性

隐藏继承的属性

属性类型描述定义在
$attributes array 要通过 $value 指定的值自动填充的属性列表. yii\behaviors\AttributeBehavior
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior
$preserveNonEmptyValues boolean 是否保留非空属性值. yii\behaviors\AttributeBehavior
$skipUpdateOnClean boolean 是否在未修改$owner没有时跳过此行为. yii\behaviors\AttributeBehavior
$value mixed 将分配给当前属性的值. yii\behaviors\AttributeBehavior

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
attach() 将行为对象附加到组件. yii\base\Behavior
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\Behavior
evaluateAttributes() 计算属性值并将其分配给当前属性. yii\behaviors\AttributeBehavior
events() 声明 所有者 事件的事件处理程序. yii\behaviors\AttributeBehavior
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\base\BaseObject

受保护的方法

隐藏继承的方法

方法描述定义在
getValue() 返回当前属性的值. yii\behaviors\AttributeBehavior

属性详情

$attributes public 属性

要通过 $value 指定的值自动填充的属性列表.

数组键是要在其上更新属性 ActiveRecord 事件, 数组值是要更新的相应属性.

你可以使用字符串来表示单个属性, 或使用数组来表示属性列表. 例如:

[
    ActiveRecord::EVENT_BEFORE_INSERT => ['attribute1', 'attribute2'],
    ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2',
]
public array $attributes = []
$preserveNonEmptyValues public 属性 (可用自版本: 2.0.13)

是否保留非空属性值.

$skipUpdateOnClean public 属性 (可用自版本: 2.0.8)

是否在未修改$owner没有时跳过此行为.

$value public 属性

将分配给当前属性的值.

这可以是一个匿名函数, 可以以数组格式调用(eg. [$this, 'methodName']), 一个表示数据库(DB)表达式的 Expression 对象(eg. new Expression('NOW()')), 标量, 字符串或任意值. 如果是前者, 则将函数的返回值分配给属性.

函数的签名应该如下:

function ($event)
{
    // 返回值将分配给该属性
}
public mixed $value null

方法详情

evaluateAttributes() public 方法

计算属性值并将其分配给当前属性.

public void evaluateAttributes ( $event )
$event yii\base\Event
events() public 方法

声明 所有者 事件的事件处理程序.

子类可以重写此方法来声明应将哪些 PHP 回调应附加到 所有者 组件的事件.

当行为附加到所有者时, 回调将附加到 所有者 的事件中; 当行为与组件分离时, 它们将与事件分离.

回调可以是以下任何一种:

  • 此行为中的方法: 'handleClick', 相当于[$this, 'handleClick']
  • 对象方法: [$object, 'handleClick']
  • 静态方法: ['Page', 'handleClick']
  • 匿名函数: function ($event) { ... }

以下是一个例子:

[
    Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
    Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
]
public array events ( )
return array

事件(数组键)和相应的事件处理程序方法(数组值).

getValue() protected 方法

返回当前属性的值.

该方法由 evaluateAttributes() 调用. 其返回值将被分配给与触发事件相对应的属性.

protected mixed getValue ( $event )
$event yii\base\Event

触发当前属性更新的事件.

return mixed

属性的值.