145 lines
5.4 KiB
PHP
145 lines
5.4 KiB
PHP
<?php
|
|
/**
|
|
* Created by chatfeed.
|
|
* @Author:$Id$
|
|
*/
|
|
|
|
namespace common\foundation;
|
|
|
|
use Yii;
|
|
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 = [];
|
|
} else {
|
|
// if (array_key_exists('list', $data)) {
|
|
// $data['list'] = self::aseEncode($data['list']);
|
|
// } else {
|
|
// $data = self::aseEncode($data);
|
|
// }
|
|
}
|
|
|
|
return ['data'=>$data,'errcode'=>$errno,'msg'=>$msg];
|
|
}
|
|
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__);
|
|
}
|
|
}
|
|
|
|
|
|
private static function aseEncode($data)
|
|
{
|
|
// return $data;
|
|
if (is_array($data)) {
|
|
foreach ($data as $key => &$value) {
|
|
if (is_array($value)) {
|
|
$value = self::aseEncode($value); // 递归处理子数组
|
|
} else {
|
|
if (in_array($key, \Yii::$app->params['aseList'])) {
|
|
if (is_string($key)) {
|
|
$value = ase_encode($value); // 加密指定键值
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
} |