[cakePHP]findの戻り値からモデル名を除去する

cakephpでModel->find('all'); をつかうと、検索結果を取得することができる。
この結果を
	$this->set('results',$this->Model->find('all'));
	$this->set('status','ok');
という具合にパラメタにセットして、
	protected function return_as_json(){
		$this->header('Content-Type: text/html');
		echo $this->indent( json_encode($this->viewVars) );
		exit();
	}
というような関数を呼び出してあげれば、検索結果をJSONで返すWebAPI的なものを作ることができる。

ところがこれがちょっと変で。JavaScriptからみた戻り値はこんなふうに見える。
{
    "results": [
        {
            "Model": {
                "id": "5",
                "user_id": "8",
                   :(略)
            }
        },
        {
            "Model": {
                "id": "4",
                "user_id": "8",
                   :(略)
            }
        },
   ],
    "status": "ok"
}
普通APIで検索結果を取得する時って、普通こうなってません?
{
    "results": [
        {
            "id": "5",
            "user_id": "8",
                   :(略)
        },
        {
            "id": "4",
            "user_id": "8",
                   :(略)
        },
    ],
    "status": "ok"
}

呼び出し側のJavaScriptから見たら、
function(res){//success
	var models = res['results'];
	for (var i = 0; i < models.length; i++) {
		console.log(models[i]['Model'].id)
	}
}
って謎の型名をつけるよりも、
function(res){//success
	var models = res['results'];
	for (var i = 0; i < models.length; i++) {
		console.log(models[i].id)
	}
}
のほうが自然ですよね。

前置きが長くなったけれど、そういうわけで型名を付けないで検索結果を返すようにする実装。
本当はjson_encodeするときに型名を落とすのが適切だと思うのだけれど、うまいやり方を思いつかなかったので、modelのカスタムfindとして定義してみた。
連想配列のまま構造を変えるのではなくて、一旦フラットにしてテキストとしてモデル名を除去しています。

allの代わりにnoModelNameを使えば、モデル名部分のないハッシュを得ることができます。
	$this->set('results', $this->Model->find('noModelName') );
	$this->return_as_json();
カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: [cakePHP]findの戻り値からモデル名を除去する

このブログ記事に対するトラックバックURL: http://mogya.com/mt/mt-tb.cgi/1623

コメントする


画像の中に見える文字を入力してください。

このブログ記事について

このページは、 もぎゃが 2013年5月 6日 17:27に書いたブログ記事です。

ひとつ前のブログ記事は「 [JavaScript]変数の存在確認 」です。

次のブログ記事は「 Evernote Devcup Workshop "世界に伝わる製品紹介ビデオの作り方" 」です。

最近のコンテンツは インデックスページ で見られます。過去に書かれたものは アーカイブのページ で見られます。

Powered by
Movable Type