YII2 学习笔记 --- Behavior

时间:2023-01-30 21:37:30
1、Behavior 通过继承类useyii\base\Behavior; 实现。 2、Behavior 结构:
class Behavior extends Object
{
// 指向行为本身所绑定的Component对象
public $owner;

// Behavior 基类本身没用,主要是子类使用,重载这个函数返回一个数组表
// 示行为所关联的事件
public function events()
{
return [];
}

// 绑定行为到 $owner
public function attach($owner)
{
... ...
}

// 解除绑定
public function detach()
{
... ...
}
}



3、Behavior 可以通过复写 event() 方法指定行为会触发的事件
    // 重载events() 使得在事件触发时,调用行为中的一些方法
public function events()
{
// 在EVENT_BEFORE_VALIDATE事件触发时,调用成员函数 beforeValidate
return [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
];
}

// 注意beforeValidate 是行为的成员函数,而不是绑定的类的成员函数。
// 还要注意,这个函数的签名,要满足事件handler的要求。
public function beforeValidate($event)
{
// ...
}



behavior 绑定的方法主要是通过配置来绑定 ,配置文件中
as behavior_name =>[ class, 配置项 ]
还有在继承了 component 类的 behaviors() 方法中定义数组
  public function behaviors()
{
return [
// 匿名行为,只有行为类名
MyBehavior::className(),

// 命名行为,只有行为类名
'myBehavior2' => MyBehavior::className(),

// 匿名行为,配置数组
[
'class' => MyBehavior::className(),
'prop1' => 'value1',
'prop2' => 'value2',
],

// 命名行为,配置数组
'myBehavior4' => [
'class' => MyBehavior::className(),
'prop1' => 'value1',
'prop2' => 'value2',
]
];
}