php api応答フォーマットデータフォーマットResponseクラス

12621 ワード


/**
 * Created by PhpStorm.
 * User:  
 * Date: 2018/10/9
 * Time: 11:49
 */

//        
class Response
{
    /**
     *     
     */
    const JSON="json";

    /**
     *                     
     * @param $code    
     * @param $message      
     * @param array $data        
     * @param string $type         (json.xml,array)
     * @return array|string
     */
    public static function show($code,$message,$data=array(),$type=self::JSON){
        //            ,return  
        if(!is_numeric($code)){
            return '';
        }

        // url  format        ,            
        //           $type    
        $type=isset($_GET['format'])?$_GET['format']:$type;

        //      
        $result=array(
            'code'=>$code,
            'message'=>$message,
            'data'=>$data,
        );

        //   $type     
        if($type=="json"){
           self::jsonToEncode($code,$message,$data);
        }elseif($type=="xml"){
            self::xmlToEncode($code,$message,$data);
        }else{
            //        
            return $result;
        }
    }

    /**
     *   json    
     * @param $code
     * @param $message
     * @param array $data
     */
    public static function jsonToEncode($code,$message,$data=array()){
        $data=[
            'code'=>$code,
            'message'=>$message,
            'data'=>$data
        ];
        echo json_encode($data);
        exit;
    }

    /***
     *   xml    
     * @param $code
     * @param $message
     * @param array $data
     */
    public static function xmlToEncode($code,$message,$data=array()){
        $result=[
            'code'=>$code,
            'message'=>$message,
            'data'=>$data
        ];
        header("Content-Type:text/xml");
        $xml="xml version='1.0' encoding='UTF-8' ?>";
        $xml.="<root>";
        $xml.=self::xmlEncode($result);
        $xml.="root>";
        echo $xml;
    }

    /**
     *         ,    xml    
     * @param $data
     * @return string
     */
    public static function xmlEncode($data){
        $xml=$attr="";
        foreach($data as $key=>$value){
            //          ,                 <item id={  }>{value}item>
            if(is_numeric($key)){
                $attr="id='{$key}'";
                $key="item";
            }
            $xml.="";
            //    , $value            
            $xml.=is_array($value)?self::xmlEncode($value):$value;
            $xml.="{$key}>";
        }
        return $xml;
    }
}
$data=[
  'id'=>1,
  'name'=>'ocean',
  'type'=>array(1,2,3=>[4,5,6])
];
Response::show(200,"success",$data,'xml');