Yii2 behavior运用

时间:2023-03-09 04:36:43
Yii2 behavior运用
 class ReturnDataTypeBehaviors extends Behavior
{ public $type = 'json';
public $pcOrMobile = 'pc'; // or mobile //控制器执行之后事件
public function events()
{
return [Controller::EVENT_BEFORE_ACTION => 'beforeType'];
} /**
* 返回数据类型判断
* @param $event
* @return bool
*/
public function beforeType($event)
{
if ($this->pcOrMobile == 'pc') {
if (Yii::$app->request->isAjax) {
if ($this->type == 'json') {
Yii::$app->response->format = Response::FORMAT_JSON;
} elseif ($this->type == 'xml') {
Yii::$app->response->format = Response::FORMAT_XML;
}
}
} else {
if ($this->type == 'json') {
Yii::$app->response->format = Response::FORMAT_JSON;
} elseif ($this->type == 'xml') {
Yii::$app->response->format = Response::FORMAT_XML;
}
}
return true;
} }

写在BaseController 里面 ,其他的控制器继承Base ,设定请求返回的数据

 <?php

 namespace app\controllers;

 use app\behaviors\ReturnDataTypeBehaviors;
use app\helpers\Util;
use yii\helpers\Url;
use yii\web\Controller;
use app\models\Configuration;
use Yii; class BaseController extends Controller
{
/**
* 默认分页值 默认10
*/
const PAGE_SIZE = 6; public function behaviors()
{
return [ 'myBehavior' => [ 'class' => ReturnDataTypeBehaviors::className(),
# 'type'=>'json',
#'pcOrMobile'=>'pc'
]
];
}
public function init()
{
//设置回调url
$this->_redirectUrl();
// 登录验证
$this->_checkLogin();
//session存留时间
$this->_setSessionTime();
} // 登录回调
private function _redirectUrl()
{
$redirectUrl = Yii::$app->request->url; if ($redirectUrl == '/site/login') { $redirectUrl = '/desktop';
}
//设置登录后的回调路径
Yii::$app->session->setFlash('redirectUrl', $redirectUrl);
} // 权限验证
private function _rbac()
{ //超级管理员不用过滤 } // 登录验证
private function _checkLogin()
{
if (!(Yii::$app->request->url == '/site/login') && !Yii::$app->user->getId()) {
header('Location:'.Yii::$app->request->getHostInfo().'/site/login');
exit;
} }
//弹出小框提示
public function TipsBox($msg='',$url='')
{ }
//设置session的存储时间
private function _setSessionTime()
{
Yii::$app->session->setTimeout(1440 * 2 );
} }
Controller::EVENT_BEFORE_ACTION => 'beforeType' 触发事件调用‘beforeType’方法