mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-01 12:42:48 +08:00
增加think\response\Xml 类和xml助手函数
This commit is contained in:
15
helper.php
15
helper.php
@@ -387,7 +387,7 @@ function view($template = '', $vars = [], $code = 200)
|
||||
* 获取\think\response\Json对象实例
|
||||
* @param mixed $data 返回的数据
|
||||
* @param integer $code 状态码
|
||||
* @param array $options 参数状
|
||||
* @param array $options 参数
|
||||
* @return \think\response\Json
|
||||
*/
|
||||
function json($data = [], $code = 200, $options = [])
|
||||
@@ -396,6 +396,19 @@ function json($data = [], $code = 200, $options = [])
|
||||
return $response->data($data)->code($code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取\think\response\Xml对象实例
|
||||
* @param mixed $data 返回的数据
|
||||
* @param integer $code 状态码
|
||||
* @param array $options 参数
|
||||
* @return \think\response\Xml
|
||||
*/
|
||||
function xml($data = [], $code = 200, $options = [])
|
||||
{
|
||||
$response = new \think\response\Xml($options);
|
||||
return $response->data($data)->code($code);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取\think\response\Redirect对象实例
|
||||
* @param mixed $url 重定向地址 支持Url::build方法的地址
|
||||
|
||||
@@ -13,8 +13,6 @@ namespace think;
|
||||
|
||||
use think\exception\HttpResponseException;
|
||||
use think\Response;
|
||||
use think\response\Json;
|
||||
use think\response\Jsonp;
|
||||
|
||||
/**
|
||||
* App 应用管理
|
||||
@@ -119,20 +117,12 @@ class App
|
||||
// 监听app_end
|
||||
APP_HOOK && Hook::listen('app_end', $data);
|
||||
$type = IS_AJAX ? Config::get('default_ajax_return') : Config::get('default_return_type');
|
||||
switch ($type) {
|
||||
case 'json':
|
||||
$response = new Json($data);
|
||||
break;
|
||||
case 'jsonp':
|
||||
$response = new Jsonp($data);
|
||||
break;
|
||||
case 'html':
|
||||
default:
|
||||
$response = new Response($data, $type);
|
||||
break;
|
||||
if (in_array(strtolower($type), ['json', 'jsonp', 'xml'])) {
|
||||
$class = '\\think\\response\\' . ucfirst($type);
|
||||
} else {
|
||||
$class = '\\think\\Response';
|
||||
}
|
||||
// 自动响应输出
|
||||
return $response->send();
|
||||
return (new $class($data, $type))->send();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
95
library/think/response/Xml.php
Normal file
95
library/think/response/Xml.php
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
|
||||
// +----------------------------------------------------------------------
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: liu21st <liu21st@gmail.com>
|
||||
// +----------------------------------------------------------------------
|
||||
|
||||
namespace think\response;
|
||||
|
||||
use think\Response;
|
||||
|
||||
class Xml extends Response
|
||||
{
|
||||
// 输出参数
|
||||
protected $options = [
|
||||
// 根节点名
|
||||
'root_node' => 'think',
|
||||
// 根节点属性
|
||||
'root_attr' => '',
|
||||
//数字索引的子节点名
|
||||
'item_node' => 'item',
|
||||
// 数字索引子节点key转换的属性名
|
||||
'item_key' => 'id',
|
||||
// 数据编码
|
||||
'encoding' => 'utf-8',
|
||||
];
|
||||
|
||||
protected $contentType = 'text/xml';
|
||||
|
||||
/**
|
||||
* 处理数据
|
||||
* @access protected
|
||||
* @param mixed $data 要处理的数据
|
||||
* @return mixed
|
||||
*/
|
||||
protected function output($data)
|
||||
{
|
||||
// XML数据转换
|
||||
return $this->xmlEncode($data, $this->options['root_node'], $this->options['item_node'], $this->options['root_attr'], $this->options['item_key'], $this->options['encoding']);
|
||||
}
|
||||
|
||||
/**
|
||||
* XML编码
|
||||
* @param mixed $data 数据
|
||||
* @param string $root 根节点名
|
||||
* @param string $item 数字索引的子节点名
|
||||
* @param string $attr 根节点属性
|
||||
* @param string $id 数字索引子节点key转换的属性名
|
||||
* @param string $encoding 数据编码
|
||||
* @return string
|
||||
*/
|
||||
protected function xmlEncode($data, $root, $item, $attr, $id, $encoding)
|
||||
{
|
||||
if (is_array($attr)) {
|
||||
$array = [];
|
||||
foreach ($attr as $key => $value) {
|
||||
$array[] = "{$key}=\"{$value}\"";
|
||||
}
|
||||
$attr = implode(' ', $array);
|
||||
}
|
||||
$attr = trim($attr);
|
||||
$attr = empty($attr) ? '' : " {$attr}";
|
||||
$xml = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";
|
||||
$xml .= "<{$root}{$attr}>";
|
||||
$xml .= $this->dataToXml($data, $item, $id);
|
||||
$xml .= "</{$root}>";
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据XML编码
|
||||
* @param mixed $data 数据
|
||||
* @param string $item 数字索引时的节点名称
|
||||
* @param string $id 数字索引key转换为的属性名
|
||||
* @return string
|
||||
*/
|
||||
protected function dataToXml($data, $item, $id)
|
||||
{
|
||||
$xml = $attr = '';
|
||||
foreach ($data as $key => $val) {
|
||||
if (is_numeric($key)) {
|
||||
$id && $attr = " {$id}=\"{$key}\"";
|
||||
$key = $item;
|
||||
}
|
||||
$xml .= "<{$key}{$attr}>";
|
||||
$xml .= (is_array($val) || is_object($val)) ? $this->dataToXml($val, $item, $id) : $val;
|
||||
$xml .= "</{$key}>";
|
||||
}
|
||||
return $xml;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user