定义行为
要定义行为,通过继承 yii/base/Behavior 或其子类来建立一个类。如:
namespace app/components;use yii/base/Behavior;class MyBehavior extends Behavior{ public $prop1; private $_prop2; public function getProp2() { return $this->_prop2; } public function setProp2($value) { $this->_prop2 = $value; } public function foo() { // ... }}
以上代码定义了行为类 app/components/MyBehavior 并为要附加行为的组件提供了两个属性 prop1 、 prop2 和一个方法 foo()。注意属性 prop2 是通过 getter getProp2() 和 setter setProp2() 定义的。能这样用是因为 yii/base/Object 是 yii/base/Behavior 的祖先类,此祖先类支持用 getter 和 setter 方法定义属性
提示:在行为内部可以通过 yii/base/Behavior::owner 属性访问行为已附加的组件。
静态方法绑定行为
静态绑定行为,只需要重载 yii/base/Component::behaviors() 就可以了。 这个方法用于描述类所具有的行为。如何描述呢? 使用配置来描述,可以是Behavior类名,也可以是Behavior类的配置数组:
namespace app/models;use yii/db/ActiveRecord;use app/Components/MyBehavior;class User extends ActiveRecord{ public function behaviors() { return [ // 匿名的行为,仅直接给出行为的类名称 MyBehavior::className(), // 名为myBehavior2的行为,也是仅给出行为的类名称 'myBehavior2' => MyBehavior::className(), // 匿名行为,给出了MyBehavior类的配置数组 [ 'class' => MyBehavior::className(), 'prop1' => 'value1', 'prop3' => 'value3', ], // 名为myBehavior4的行为,也是给出了MyBehavior类的配置数组 'myBehavior4' => [ 'class' => MyBehavior::className(), 'prop1' => 'value1', 'prop3' => 'value3', ] ]; }}
还有一个静态的绑定办法,就是通过配置文件来绑定:
[ 'as myBehavior2' => MyBehavior::className(), 'as myBehavior3' => [ 'class' => MyBehavior::className(), 'prop1' => 'value1', 'prop3' => 'value3', ],]
动态方法绑定行为
动态绑定行为,需要调用 yii/base/Compoent::attachBehaviors():
$Component->attachBehaviors([ 'myBehavior1' => new MyBehavior, // 这是一个命名行为 MyBehavior::className(), // 这是一个匿名行为]);
这个方法接受一个数组参数,参数的含义与上面静态绑定行为是一样一样的。
在上面的这些例子中,以数组的键作为行为的命名,而对于没有提供键名的行为,就是匿名行为。
对于命名的行为,可以调用 yii/base/Component::getBehavior() 来取得这个绑定好的行为:
$behavior = $Component->getBehavior('myBehavior2');
新闻热点
疑难解答