Yii2 行为
参考:https://www.cnblogs.com/achengmu/p/6605198.html
https://blog.csdn.net/jalon2015/article/details/46900569
https://www.jianshu.com/p/63e56d2f51ef
还有个http://www.cnblogs.com/jkko123/p/8670826.html
yii2中的行为理解就是,写一个继承yii\base\Behavior的类,然后其他继承自component的组件或者类可以直接使用这个类的方法或者属性
其实就相当于use
例子:
先写继承behavior的类
namespace app\components\behavior;
use yii\base\Behavior;
class MyBehavior extends Behavior{
public $name;
public $age;
// set方法
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function setAge($age)
{
$this->age = age;
}
public function getAge()
{
return $this->age;
}
// 也可以在里面写事件
public function events() {
return [
BaseActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
BaseActiveRecord::EVENT_AFTER_INSERT => 'afterSave',
BaseActiveRecord::EVENT_AFTER_UPDATE => 'afterSave',
BaseActiveRecord::EVENT_BEFORE_DELETE => 'beforeDelete',
];
}
}
然后其他类直接先使用behavior方法用
class DefaultController extends Controller
{
public $url;
public function behaviors()
{
return [
// 匿名行为,只有行为类名
'MyBehavior'=>[
'class'=>MyBehavior::className(), // 这边要被上面use了
'name'=>'jerry',
'age'=>20
]
];
}
/**
* 开始在方法中使用
* @return string
*/
public function actionIndex()
{
return $this->render('index', ['age'=>$this->age, 'name'=>$this->name]);// 这边直接使用
> 这边是另一个添加行为的方法,就是一个继承了component的类然后attach了behavior,这个attach用的比较多
$MyBehavior=new MyBehavior;// 继承的是behavior
$MyBehaviorAttachClass=new MyBehaviorAttachClass;// 继承的是component
$MyBehaviorAttachClass->attachBehavior('MyBehavior',$MyBehavior);// 附加上去
echo $MyBehaviorAttachClass->propertyTest;// 直接使用行为的属性
echo $MyBehaviorAttachClass->methodTest();// 和方法
}
}