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クラスによって行われます。Media.php を Bootstrap.php に追加する必要があるかどうかはわかりません。試してみてください。

Lithium は JSON の表示方法を既に知っているため、ビューなどを提供する必要はありません。また、同じアクションのビューを作成する場合、基本的に同じデータが必要になるため、コントローラーが実際に行うべきことも教えてくれます。

乾杯

于 2012-03-09T12:17:43.763 に答える