Zend rpc json返回数组

时间:2015-03-02 22:02:17

标签: php arrays json zend-framework zend-framework2

嗨,我有一个小问题,我无法弄清楚。我正在使用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',

1 个答案:

答案 0 :(得分:2)

在您的操作中,您必须返回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
]);