没有命名空间的类 yii yii\base yii\behaviors yii\caching yii\captcha yii\console yii\console\controllers yii\console\widgets yii\data yii\db yii\db\conditions yii\db\cubrid yii\db\cubrid\conditions yii\db\mssql yii\db\mssql\conditions yii\db\mysql yii\db\oci yii\db\oci\conditions yii\db\pgsql yii\db\sqlite yii\db\sqlite\conditions yii\di yii\filters yii\filters\auth yii\grid yii\helpers yii\i18n yii\log yii\mail yii\mutex yii\rbac yii\rest yii\test yii\validators yii\web yii\widgets

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/yiichina/yii2/blob/api/framework/behaviors/AttributeBehavior.php

当某个事件发生的时候,AttributeBehavior 可以自动地给某个或多个 ActiveRecord 对象的属性 分配指定的值。

在使用 AttributeBehavior 的时候,需要配置 $attributes 属性,这个属性应该指明需要更新的属性列表 和触发更新时对应的事件。然后配置 $value 属性为一个 PHP 回调函数 该回调函数返回要分配给当前属性的值。 比如,

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 自动填充。 数组的键是 ActiveRecord 的事件,属性就是更新于这些事件之上, 数组的值就是要更新的属性。 你可以用字符串来表示一个单独的属性也可以用一个数组来表示一系列属性。比如, `php [ ActiveRecord::EVENT_BEFORE_INSERT => ['attribute1', 'attribute2'], ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2', ] ` yii\behaviors\AttributeBehavior
$owner yii\base\Component|null The owner of this behavior yii\base\Behavior
$preserveNonEmptyValues boolean 是否保留非空的属性值 yii\behaviors\AttributeBehavior
$skipUpdateOnClean boolean $owner 没有更新的时候是否跳过这个行为 yii\behaviors\AttributeBehavior
$value mixed 要分配给当前属性的值。它可以是一个匿名函数, 数组格式的 callable(比如 [$this, 'methodName']),一个 Expression 对象表示的 DB 表达式 (比如 new Expression('NOW()')),标量,字符串或者一个任意的值。 如果是前者,函数的返回值将会设置给这些属性。 函数的签名应该像下面这样, `php function ($event) { // 返回值将会设置到当前的属性 } ` yii\behaviors\AttributeBehavior

公共方法

隐藏继承的方法

方法描述被定义在
__call() Calls the named method which is not a class method. yii\base\BaseObject
__construct() Constructor. yii\base\BaseObject
__get() Returns the value of an object property. yii\base\BaseObject
__isset() Checks if a property is set, i.e. defined and not null. yii\base\BaseObject
__set() Sets value of an object property. yii\base\BaseObject
__unset() Sets an object property to null. yii\base\BaseObject
attach() Attaches the behavior object to the component. yii\base\Behavior
canGetProperty() Returns a value indicating whether a property can be read. yii\base\BaseObject
canSetProperty() Returns a value indicating whether a property can be set. yii\base\BaseObject
className() Returns the fully qualified name of this class. yii\base\BaseObject
detach() Detaches the behavior object from the component. yii\base\Behavior
evaluateAttributes() 计算属性的值并分配给当前属性。 yii\behaviors\AttributeBehavior
events() Declares event handlers for the $owner's events. yii\behaviors\AttributeBehavior
hasMethod() Returns a value indicating whether a method is defined. yii\base\BaseObject
hasProperty() Returns a value indicating whether a property is defined. yii\base\BaseObject
init() Initializes the object. yii\base\BaseObject

受保护的方法

隐藏继承的方法

方法描述被定义在
getValue() 返回给当前属性准备的值。 该方法在 evaluateAttributes() 里调用。 它的返回值将会设置到对应触发事件的属性上。 yii\behaviors\AttributeBehavior

属性详情

$attributes 公共 属性

属性列表,属性的值将由 $value 自动填充。 数组的键是 ActiveRecord 的事件,属性就是更新于这些事件之上, 数组的值就是要更新的属性。 你可以用字符串来表示一个单独的属性也可以用一个数组来表示一系列属性。比如,

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

是否保留非空的属性值

$skipUpdateOnClean 公共 属性 (自版本 2.0.8 可用)

$owner 没有更新的时候是否跳过这个行为

$value 公共 属性

要分配给当前属性的值。它可以是一个匿名函数, 数组格式的 callable(比如 [$this, 'methodName']),一个 Expression 对象表示的 DB 表达式 (比如 new Expression('NOW()')),标量,字符串或者一个任意的值。 如果是前者,函数的返回值将会设置给这些属性。 函数的签名应该像下面这样,

function ($event)
{
    // 返回值将会设置到当前的属性
}
public mixed $value null

方法详情

evaluateAttributes() 公共 方法

计算属性的值并分配给当前属性。

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

Declares event handlers for the $owner's events.

Child classes may override this method to declare what PHP callbacks should be attached to the events of the $owner component.

The callbacks will be attached to the $owner's events when the behavior is attached to the owner; and they will be detached from the events when the behavior is detached from the component.

The callbacks can be any of the following:

  • method in this behavior: 'handleClick', equivalent to [$this, 'handleClick']
  • object method: [$object, 'handleClick']
  • static method: ['Page', 'handleClick']
  • anonymous function: function ($event) { ... }

The following is an example:

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

Events (array keys) and the corresponding event handler methods (array values).

getValue() 受保护 方法

返回给当前属性准备的值。 该方法在 evaluateAttributes() 里调用。 它的返回值将会设置到对应触发事件的属性上。

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

触发当前属性更新的事件

return mixed

属性值