嗨,我有一个小问题想不通。我正在使用ZendFramework和Apigility编写RPC服务。响应必须是json数组。接下来是所有内容协商代码。
'controllers' => array(
'NmdaWebApi\V1\Rpc\Hola\Controller' => 'Json',
'accept_whitelist' => array(
'NmdaWebApi\V1\Rpc\Hola\Controller' => array(
0 => 'application/vnd.nmda-web-api.v1+json',
1 => 'application/json',
2 => 'application/*+json',
),
'content_type_whitelist' => array(
'NmdaWebApi\V1\Rpc\Hola\Controller' => array(
0 => 'application/json',
),
这就是我的控制器
class HolaController extends AbstractActionController{
public function holaAction(){
return array(1,2,3,4,5);}}
这是返回的json。
{"0":1,"1":2,"2":3,"3":4,"4":5}
我得到了这个列表和一个数组。这里是另一个例子。
return array(1,2,3,4,array(5,6,7));
{"0":1,"1":2,"2":3,"3":4,"4":[5,6,7]}
有人能解释一下如何避免这种情况吗?
Edit_1
我想出了一个变通办法。使用HalJson可以解决问题。但我仍然不明白为什么它不能和正常的Json一起工作。
'controllers' => array(
'NmdaWebApi\V1\Rpc\Hola\Controller' => 'HalJson',
在操作中,必须返回JsonModel。要做到这一点,首先在module.config.php的"view_manager"部分下创建一个"策略"键:
'view_manager' => array(
'strategies' => array(
'ViewJsonStrategy',
),
),
现在,您可以在操作中返回JsonModel:
$data = array(1, 2, 3, 4, 5);
return new JsonModel([
'data' => $data
]);