Zend-rpc-json返回数组



嗨,我有一个小问题想不通。我正在使用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
]);

最新更新