Files
xk-api-yii/admin/foundation/JsonResponseFormatter.php
2024-09-19 11:32:39 +08:00

120 lines
5.0 KiB
PHP

<?php
/**
* Created by chatfeed.
* @Author:$Id$
*/
namespace admin\foundation;
use Yii;
use yii\base\UserException;
use yii\helpers\Json;
class JsonResponseFormatter extends \yii\web\JsonResponseFormatter
{
private $defaultErrorCode = -1;
public static function formatData($data, $errno = 0, $msg = '')
{
// if(empty($data)) $data = new \stdClass();
if (empty($data)) $data = [];
$result['data'] = $data;
$result['msg'] = $msg;
$result['errcode'] = $errno;
return $result;
}
public $encrypt = true; //是不加密
/**
* Formats response data in JSON format.
* @param \yii\web\Response $response
*/
protected function formatJson($response)
{
//$response->getHeaders()->set('Content-Type', 'text/plain; charset=UTF-8');
//$response->getHeaders()->set("Access-Control-Allow-Origin","*");
if ($response->data !== null) {
$options = $this->encodeOptions;
if ($this->prettyPrint) {
$options |= JSON_PRETTY_PRINT;
}
$errcode = 0;
$msg = '';
$data = [];
if (!$response->isSuccessful) {
$response->statusCode = 200;
$errcode = -1;
if (Yii::$app->errorHandler->exception) {
// if(Yii::$app->errorHandler->exception instanceof )
if (isset(Yii::$app->errorHandler->exception->statusCode)) {
$errcode = Yii::$app->errorHandler->exception->statusCode;
} elseif (Yii::$app->errorHandler->exception->getCode() > 0) {
$errcode = Yii::$app->errorHandler->exception->getCode();
} else {
$errcode = $this->defaultErrorCode;
}
$msg = YII_DEBUG ? Yii::$app->errorHandler->exception->getMessage() : '服务器内部错误';
}
} else {
$data = $response->data;
}
$response->data = self::formatData($data, $errcode, $msg);
// var_dump($response->data);exit;
// if(!$response->isSuccessful){
// $response->statusCode = 200;
// if($response->data['code']>20000)
// $code = $response->data['code'];
// else
// $code = ErrorCode::APP_EXCEPTION;
// $redirect = '';
// $response->data = BController::ApiResponse([],$response->data['message'],$code,$redirect);
// }
// if(isset(Yii::$app->params['response_encrpyt']) && Yii::$app->params['response_encrpyt']){
// $encryption = new MCrypt();
// $response->content = $encryption->encrypt(Json::encode($response->data, $options));
// }else{
$response->content = Json::encode($response->data, $options);
// }
}
}
/**
* Formats response data in JSONP format.
* @param \yii\web\Response $response
*/
protected function formatJsonp($response)
{
$response->getHeaders()->set('Content-Type', 'application/javascript; charset=UTF-8');
if ($response->data !== null) {
$options = $this->encodeOptions;
if ($this->prettyPrint) {
$options |= JSON_PRETTY_PRINT;
}
if (!$response->isSuccessful) {
$response->statusCode = 200;
if ($response->data['code'] > 20000)
$code = $response->data['code'];
else
$code = $this->defaultErrorCode;
$redirect = '';
// $response->data = BController::ApiResponse([],$response->data['message'],$code,$redirect);
}
// if(isset(Yii::$app->params['response_encrpyt']) && Yii::$app->params['response_encrpyt']){
// $encryption = new MCrypt();
// $response->content = $encryption->encrypt(Json::encode($response->data, $options));
// }else{
// $response->content = Json::encode($response->data, $options);
// }
}
$response->data = ['data' => $response->data, 'callback' => Yii::$app->getRequest()->get('callback')];
if (is_array($response->data) && isset($response->data['data'], $response->data['callback'])) {
$response->content = sprintf('%s(%s);', $response->data['callback'], Json::htmlEncode($response->data['data']));
} elseif ($response->data !== null) {
$response->content = '';
Yii::warning("The 'jsonp' response requires that the data be an array consisting of both 'data' and 'callback' elements.", __METHOD__);
}
}
}