2012-03-09 68 views
1

我不太确定制作动作返回json需要什么。
我敢肯定有更多的方法来剥皮这只猫,但我不知道什么是绝对必要的。对JSON输出的要求

是否足以只是$这个 - >渲染(阵列(“JSON” =>紧凑型(“数据”));?
我是否需要添加路由指定其JSON
难道我还需要添加的媒体类型应用程序/ JSON
难道我还需要添加默认布局default.json.php
难道我还需要添加视图action.json.php

注:???我想任何URL:www.mysite.com/Controller/Action总是返回json
我宁愿能够在我的动作中只指定返回类型(即,rende r型)。

+0

你在问这个Zend Framework吗? – quickshiftin 2012-03-09 09:11:54

+0

nm,我现在看到了lithum标签 – quickshiftin 2012-03-09 09:28:18

回答

5

因此,原来没有在运算需要其他那么这行的时候,你在控制器的作用下返回数据:

return $this->render(array('json' => $data = array(), 'status'=> 200)); 

出头应注意的是,从记录集返回的数据确实很难看。用户应该首先执行$ recordset->('array')。不知道为什么,而是('json')最终转义了所有的引号,这使得json字符串非常怪异。

+0

这应该是有效的,但也检查我的后续在您的评论我的文章 – Tomen 2012-03-12 15:14:35

0

返回JSON比您想象的要容易。最近,我做到了,很惊讶

我只是指的游戏我正在开发给你看 - https://github.com/BitAlchemists/Elenears-Erben/blob/master/app/controllers/MapsController.php

public function view() 
{ 
    $gameId = $this->request->params['id']; 
    if($gameId == null) 
    { 
     return new Response(); 
    } 

    $xSize = 10; 
    $ySize = 10; 
    $fields = Maps::first(array('game_id' => $gameId))->fields; 
    return compact('xSize', 'ySize', 'fields'); 
} 

你去那里:你只需要准备好你的数据,并将其返回。魔术由Media课完成。我不知道是否必须将Media.php添加到Bootstrap.php,只是试试。

我想解释是,你不必提供视图或任何东西,因为锂已经知道如何呈现JSON。它还教你一些控制器实际应该做的事情,因为如果你为同一个动作写一个视图,它基本上需要相同的数据。

干杯

+0

那我一定做错了什么,因为那对我没有用。我会尝试下载最新的,并组装一个简单的控制器。 – 2012-03-10 09:32:35

+0

您是否启用拟合路线?你需要激活Router :: connect('/ {:controller}/{:action}/{:id:[0-9a-f] {24}}。{:type}',array('id' => null)); – Tomen 2012-03-12 15:12:55

+1

我没有,但API是私人的,我不打算让用户通过GET或路线检索数据。此外,测试项目也不需要它,所以我很满意我的答案。感谢您的回复。 – 2012-03-13 02:07:09