120 lines
5.0 KiB
PHP
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__);
|
|
}
|
|
}
|
|
}
|