[CakePHP2] json形式のデータを手軽に出力する

メインで使うPHPフレームワークをCakePHP1.3系→2系にしてから数ヶ月が立ちました。

PHPUnitや、Pluginなどでも2系の恩恵を感じていますが、今回はより手軽にできるようになっていたjson形式のデータ出力方法をご紹介してみます。
 
APIなどでよく使うjsonですが、1.3系までだと独自のwrapperメソッドを用意してstatusと結果を一緒に返すような仕組みをつくったりしていました。

2系からはCakeResponseを使った方法など含め、簡単なやり方が増えているみたいですが、中でも以下のやり方が手軽で気に入っています。
 

例えば、status=”complete”、message=”"みたいな結果をjson形式のデータを、レスポンスとして返却する場合。
コントローラ内のfunctionで以下のようにすればOKです。

public function jsonTest() {
    $result = ['status' => 'complete', 'msg' => 'Request completed.'];
    $this->viewClass = 'Json';
    $this->set(compact('result'));
    $this->set('_serialize', 'result');
}

 

これをブラウザ側で叩くと、

{"status":"complete","msg":"Request completed."}

となります。

$result変数の中身を、viewに渡して、_serialiseにセットしたresultを指定すると、cake標準のviewによってjson形式の出力結果を返してくれます。
 

もちろん連想配列でもいけます。

    public function jsonTest()
    {
        $result = ['status' => 'complete', 'fruits' => ['apple', 'orange', 'banana']];
        $this->viewClass = 'Json';
        $this->set(compact('result'));
        $this->set('_serialize', 'result');
    }

 

結果は、

{"status":"complete","fruits":["apple","orange","banana"]}

となります。
 

modelのデータ配列をそのまま渡して使うなど、実践的に使える場面もありそうです。
 

viewClassの指定など、CakePHP2.1で超簡単にJSONを出力する方法を参考にさせてもらいました。

お試しあれ。