yii2 行为

behavior 是 yii\base\Behavior 或其子类的实例, behavior,可以无须改变类继承关系即可增强一个已有的 yii\base\Component 类功能。当行为附加到组件后,它将“注入”它的方法和属性到组件,然后可以像访问组件内定义的方法和属性一样访问它们。 此外,行为通过组件能响应被触发的事件, 从而自定义或调整组件正常执行的代码。

定义行为

~/yiint/components/MyBehavior.php

以上代码定义了行为类 @app\components\MyBehavior 并为要附加行为的组件提供了两个属性 prop1 、 prop2 和一个方法 foo()。

附加行为

静态附加行为

覆写行为要附加的组件类的 yii\base\Component::behaviors() 方法, 返回行为配置列表。

每个行为配置格式:

动态附加行为

在对应组件里调用 yii\base\Component::attachBehavior() 方法

可以通过 yii\base\Component::attachBehaviors() 方法一次附加多个行为:

使用行为

将behavior 附加到 yii\base\Component 类或其子类后就可以直接使用它。

行为对象

附加行为到组件时的命名行为, 可以使用这个名称来访问行为对象

移除行为

要移除行为,可以调用 yii\base\Component::detachBehavior() 方法用行为相关联的名字实现:

使用 TimestampBehavior

yii\behaviors\TimestampBehavior 行为支持在 yii\db\ActiveRecord 存储时自动更新它的时间戳属性。

首先,附加这个行为到计划使用该行为的 yii\db\ActiveRecord 类:

以上指定的行为数组:

当记录插入时, 行为将当前的 UNIX 时间戳赋值给 created_at 和 updated_at 属性;

当记录更新时,行为将当前的 UNIX 时间戳赋值给 updated_at 属性。

保存 User 对象, 将会发现它的 created_at 和 updated_at 属性自动填充了当前时间戳:

处理事件

如果要让行为响应对应组件的事件触发, 就应覆写 yii\base\Behavior::events() 方法,如:

yii\base\Behavior::events() 方法返回事件列表和相应的处理器。 上例声明了 yii\db\ActiveRecord::EVENT_BEFORE_VALIDATE 事件和它的处理器 beforeValidate()

发表评论