1

我不确定要使操作返回 json 需要什么。
我敢肯定有不止一种方法可以给这只猫剥皮,但我不确定什么是绝对需要的。

仅 $this->render(array('json' => compact('data')); 是否足够?
我是否需要添加指定其 json 的路由?
是否还需要添加媒体类型 application/json ?
是否还需要添加默认布局default.json.php?
是否还需要添加视图action.json.php?

注意:我想要任何任意 url:www.mysite.com/Controller/Action 总是返回 json。
我希望能够仅在我的操作中指定返回类型(即渲染类型)。

4

2 回答 2

5

因此,当您在控制器操作的底部返回数据时,除了这一行之外,操作中不需要任何内容​​:

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

需要注意的是,从记录集返回的数据真的很难看。用户应该先做一个 $recordset->to('array') 。不知道为什么,但是 to('json') 最终转义了所有引号,这使得 json 字符串非常时髦。

于 2012-03-11T22:25:17.217 回答
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班级完成的。不知道是不是一定要在Bootstrap.php中加入Media.php,试试看。

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

干杯

于 2012-03-09T12:17:43.763 回答