yii2的Behavior 其实就是yii中的行为,可以拓展现有类,在不修改现有类的情况下,对类的功能进行扩充。通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法,就好像是类本来就具有的这些属性和功能一样。
使用:
先在根目录里面创建一个文件夹,名字是components,再创建一个文件名为MyBehavior
namespace app\components;
use yii\db\ActiveRecord;
use yii\base\Behavior;
class MyBehavior extends Behavior
{
// 其它代码
public function events()
{
return [
ActiveRecord::EVENT_BEFORE_VALIDATE => 'beforeValidate',
];
}
public function beforeValidate($event)
{
// 处理器方法逻辑
$model = $this->owner;
$model->content .= '--beforeinsert';
}
}
调用方式:
- 静态调用方式:
静态调用方式,就是在对应的模型里面调用。然后再正常使用模型里面的方法就行了,
use app\components\HelloBehavior;
class Test extends ActiveRecord
{
public function behaviors()
{
// return parent::behaviors(); // TODO: Change the autogenerated stub
return [
'hello'=>HelloBehavior::className(),
];
}
}
- 动态调用方式:
动态调用方式就是在控制器里面使用,new完一个模型之后,在使用attachBehaviors
use app\components\HelloBehavior;
use yii\web\Controller;
use app\models\Test;
use app\components\HelloBehavior;
class TestController extends Controller
{
public function actionSave(){
$model = new Test();
$model->attachBehaviors([
HelloBehavior::className()
]);
$model->content = 'behavior测试1';
$model->create_at = date('Y-m-d H:i:s');
dd( $model->save() );
}
}