<?php namespace backend\controllers; use Yii; /** * Class PublicController * @package backend\controllers */ class PublicController extends BaseController { public $enableCsrfValidation = false; /** * [通用Error错误处理] * @author: libingke * @return string */ public function actionError() { $page = 'error'; $e = Yii::$app->errorHandler->exception; $errMsg = $e->getMessage(); $errCode = isset($e->statusCode) ? $e->statusCode : (isset(Yii::$app->response->statusCode) ? Yii::$app->response->statusCode : 500); if ($e !== null) { switch($errCode) { case 404: $page = 404; break; case 500: $page = 500; break; } } return $this->render($page, [ 'code' => isset($errCode) ? $errCode :500, 'message' => isset($errMsg) ? $errMsg : '' ]); } /** * ajax预请求 特殊处理 * @author: libingke * @param string $case */ public function actionAjax($case = '') { try { switch($case) { //云矿机 case 'miner_query': $data = $this->getMinerQuery(); break; default: $data = [ 'message' => 'Unknown request.', 'request' => '' ]; } } catch (\Exception $e) { $data = [ 'message' => $e->getMessage() . " [{$e->getTraceAsString()}]" , 'request' => '' ]; } $response = Yii::$app->response; $response->format = yii\web\Response::FORMAT_JSON; $response->data = $data; $response->send(); } /** * 处理云矿机查询api * @author: libingke * @return array */ protected function getMinerQuery() { $req_type = 'post'; $method = strtolower(Yii::$app->request->$req_type('type', 'get')); $url = Yii::$app->request->$req_type('url', ''); $header = Yii::$app->request->$req_type('headers', []); $data = $this->_formatData(Yii::$app->request->$req_type('data')); $query = Yii::$app->request->$req_type('query', []); $return = [ 'message' => '', 'request' => [ 'type' => $method, 'url' => $url, 'headers' => $header, 'query' => $query, 'data' => $data, ], 'response' => [] ]; if (!empty($query)) { Yii::$app->cUrl->setQuery($query); } if (!empty($data)) { Yii::$app->cUrl->setData($data, 'JSON'); } Yii::$app->cUrl->setHeader($header); //$options = Yii::$app->cUrl->getOptions(); $response = Yii::$app->cUrl->$method($url, 'JSON'); if (isset($response['content'])) { $return['response'] = $response['content']; } else { $return['message'] = "服务错误。[cUrl]"; } return $return; } /** * 格式化post数据 * @author: libingke * @param $data * @return array */ private function _formatData($data) { $ret = []; if (is_array($data) && $data) { foreach ($data as $row) { $key = isset($row['name']) ? $row['name'] : ''; $value = isset($row['value']) ? $row['value'] : ''; $key ? $ret[$key] = $value : null; } } return $ret; } }