header_list = self::$default_header_list; $this->fzmCrossHeader(); } } public function behaviors() { $request_controller = Yii::$app->controller->id; $request_action = Yii::$app->controller->action->id; $interceptor_global = array_unique(Yii::$app->params['interceptor']['global']); $interceptor_default = array_unique(Yii::$app->params['interceptor']['default']); $interceptor_mapping = isset(Yii::$app->params['interceptor'][$request_controller]) ? array_unique(Yii::$app->params['interceptor'][$request_controller]) : null; $controller_enable = $interceptor_mapping ?? false; $behaviors = []; $final_interceptor = array_keys(array_flip(array_merge($interceptor_global, $interceptor_default))); if ($controller_enable) { $interceptor_map = $interceptor_mapping['interceptors']; if ($interceptor_map) { $switch = array_shift($interceptor_map); if (false == $switch) { $deny_interceptor = $interceptor_map; $final_interceptor = array_diff($interceptor_default, $deny_interceptor); } else { $final_interceptor = array_unique($interceptor_map); } } $action_mapping = $interceptor_mapping['actions'] ?? false; if ($action_mapping) { //指定方法使用哪些拦截器 foreach ($action_mapping as $val) { $action_id = array_shift($val); //拦截器配置文件中的action $interceptor_map = $val[0]; $switch = array_shift($interceptor_map); //拦截器配置文件中action对应的拦截开关 if ($action_id == $request_action) { if (false == $switch) { $final_interceptor = array_unique(array_merge($interceptor_map, $interceptor_global)); $final_interceptor = array_diff($interceptor_default, array_diff($final_interceptor, $interceptor_global)); } else { $final_interceptor = array_unique($interceptor_map); } } } } } foreach ($final_interceptor as $key => $item) { $behaviors[$key] = [ 'class' => $item, ]; } return $behaviors; } public function fzmCrossHeader() { $this->lang = \Yii::$app->request->headers->get('lang') ?? 'zh-CN'; } public function beforeAction($action) { $this->start = microtime(true); return parent::beforeAction($action); // TODO: Change the autogenerated stub } public function afterAction($action, $result) { $this->end = microtime(true); return parent::afterAction($action, $result); // TODO: Change the autogenerated stub } /** * 返回成功结果,附加成功code * @param type $data * @return array */ public static function formatSuccessResult($data = null) { return self::formatResult(0, 'ok', $data); } /** * 返回结果,附加部分信息 * @param int $errcode * @param string $errmsg * @param array $data */ public static function formatResult($errcode, $errmsg, $data = null) { $callback = Yii::$app->request->get('callback'); $result = [ 'errcode' => $errcode, 'errmsg' => $errmsg, ]; if($data !== null) { $result['data'] = Yii::createObject('yii\rest\Serializer')->serialize($data); } $response = Yii::$app->response; $response->format = Response::FORMAT_JSON; //jsonp数据格式 if(!is_null($callback)) { Yii::$app->getResponse()->format = Response::FORMAT_JSONP; $result = [ 'data' => $result, 'callback' => $callback, ]; } return $result; } protected function addPaginationHeaders($pagination) { $links = []; foreach ($pagination->getLinks(true) as $rel => $url) { $links[] = "<$url>; rel=$rel"; } Yii::$app->getResponse()->getHeaders() ->set('X-Pagination-Total-Count', $pagination->totalCount) ->set('X-Pagination-Page-Count', $pagination->getPageCount()) ->set('X-Pagination-Current-Page', $pagination->getPage() + 1) ->set('X-Pagination-Per-Page', $pagination->pageSize) ->set('Link', implode(', ', $links)); } protected function getRequestedFields() { $fields = Yii::$app->request->get('fields'); $expand = Yii::$app->request->get('expand'); return [ preg_split('/\s*,\s*/', $fields, -1, PREG_SPLIT_NO_EMPTY), preg_split('/\s*,\s*/', $expand, -1, PREG_SPLIT_NO_EMPTY), ]; } protected function serializeModels(array $models) { list ($fields, $expand) = $this->getRequestedFields(); foreach ($models as $i => $model) { if ($model instanceof Arrayable) { $models[$i] = $model->toArray($fields, $expand); } elseif (is_array($model)) { $models[$i] = ArrayHelper::toArray($model); } } return $models; } }