Class yii\behaviors\AttributeBehavior
当某个事件发生的时候,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 |
属性详情
属性列表,属性的值将由 $value 自动填充。 数组的键是 ActiveRecord 的事件,属性就是更新于这些事件之上, 数组的值就是要更新的属性。 你可以用字符串来表示一个单独的属性也可以用一个数组来表示一系列属性。比如,
[
ActiveRecord::EVENT_BEFORE_INSERT => ['attribute1', 'attribute2'],
ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2',
]
是否保留非空的属性值
当 $owner
没有更新的时候是否跳过这个行为
要分配给当前属性的值。它可以是一个匿名函数,
数组格式的 callable(比如 [$this, 'methodName']
),一个 Expression 对象表示的 DB 表达式
(比如 new Expression('NOW()')
),标量,字符串或者一个任意的值。
如果是前者,函数的返回值将会设置给这些属性。
函数的签名应该像下面这样,
function ($event)
{
// 返回值将会设置到当前的属性
}
方法详情
计算属性的值并分配给当前属性。
public void evaluateAttributes($event) | ||
$event | yii\base\Event |
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). |
---|
返回给当前属性准备的值。 该方法在 evaluateAttributes() 里调用。 它的返回值将会设置到对应触发事件的属性上。
protected mixed getValue($event) | ||
$event | yii\base\Event | 触发当前属性更新的事件 |
return | mixed | 属性值 |
---|