## 数据输出
`ExpressPHP` 的数据都是由控制器的方法返回的,控制器返回的数据都是采用 `Response` 类统一输出的。
>[info] 直接返回数组,数组会自动转换为 json 输出。
~~~
namespace app\controller;
class Index
{
public function index()
{
$data = ['uid' => 100, 'userName' => '小花'];
return ['errCode' => 0, 'errMsg' => 'ok', 'data' => $data];
}
}
~~~
最终可以在浏览器中看到输出结果如下:
~~~
{"errCode":0,"errMsg":"ok","data":{"uid":100,"userName":"小花"}}
~~~
>[info] 默认数组是转换为 json,也可修改为其他类型,比如 jsonp、xml。
修改 `config.response.array_default_convert` 配置项为如下:
~~~
'array_default_convert' => 'xml',
~~~
>[info] 指定为 json 类型返回。
~~~
namespace app\controller;
use sys\response\Json;
class Index
{
public function index()
{
$data = ['uid' => 100, 'userName' => '小花'];
// 指定为json类型
return Json::create(['errCode' => 0, 'errMsg' => 'ok', 'data' => $data]);
}
}
~~~
最终可以在浏览器中看到输出结果如下:
~~~
{"errCode":0,"errMsg":"ok","data":{"uid":100,"userName":"小花"}}
~~~
>[success] Json类输出的数据不会转义中文、反斜杠,能更好的支持iOS,同时节约流量。
## null转空字符串
开发 `API` 时,因为 `iOS` 解析含有 `null` 的 `json` 时会报致命错误,`ExpressPHP` 的 `Json` 类与 `Pdo` 类都可以对null转空字符串,默认是不开启的,需用户手动开启。
>[info] A. [Json输出] 修改 config.json.null_to_string 配置项如下:
~~~
// 将 NULL 转换成空字符串
'null_to_string' => true,
~~~
修改后,`Json` 类输出的数据会将 `null` 转为空字符串
>[info] B. [数据库返回] 在 pdo.attribute 配置项增加如下:
~~~
\PDO::ATTR_ORACLE_NULLS => \PDO::NULL_EMPTY_STRING
~~~
修改后,数据库 `Pdo` 类返回的结果集会将 `null` 转为空字符串
>[success] 推荐使用修改 pdo.attribute 的方式,PDO原生支持,性能更好。