2015-03-02 53 views
0

嗨,我有一個小問題,我找不出來。我使用ZendFramework和Apigility編寫RPC服務。響應必須是一個json數組。接下來是所有內容協商代碼。Zend rpc json return array

'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', 
+0

如果適合你嘗試返回數組('ids'=> array(1,2,3,4,5)); 比你會有你的陣列,但在關鍵「ids」 – tasmaniski 2015-03-02 22:14:28

+0

嗯不是我正在尋找什麼。 – 2015-03-02 22:18:52

回答

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 
]); 
+0

我打算試一試。 – 2015-03-03 11:07:40

+0

從我的Controller類中返回JsonModel工作。我只是這樣使用它。返回新的JsonModel($ data);. – 2015-03-03 11:19:28