CakePHP2でJSONデータを提供するプログラムを作成するのは簡単です。CakePHP2を使って、http://localhost/cakephp/sample/items/ でItemテーブルの一覧を表示できるようなWebアプリを作成済みだとします。
app/Controller/ItemsController.php に下記メソッドを追加します。こうすると、「http://localhost/cakephp/sample/items/list_all」でJSONデータを取得できるようになります。ポイントはviewClassへJsonを指定している点、_serializeへJSONデータにしたい変数を指定している点です。ここではDBから取得したすべてのデータをlistへ設定してから、そのlistを_serializeへ指定しています。
public function list_all() { $this->set('list', $this->Item->find('all')); $this->viewClass = 'Json'; $this->set('_serialize', 'list'); }
独自の変数を指定したい場合は下記のようになります。この場合は「http://localhost/cakephp/sample/items/sample_item_json」というURLにアクセスするとJSONデータを取得できます。
public function sample_item_json() { $item = "サンプル"; $this->set('item', $item); $this->viewClass = 'Json'; $this->set('_serialize', 'item'); }
拡張子にjsonをつけたい時は、app/Config/routes.php に下記を追加します。こうすると、「http://localhost/cakephp/sample/items/list_all」だけではなく「http://localhost/cakephp/sample/items/list_all.json」でもJSONデータを取得できるようになります。
Router::parseExtensions('json');
app/Controller/AppController.php へ下記のように RequestHandler を追加する必要もあるようですが、CakePHP 2.3.8ではこの設定をしなくても動きました。list_all と list_all.json とで表示を分けたいときに役に立つようです。
class AppController extends Controller { public $components = array('Session', 'RequestHandler'); }
CakePHP2については下記が参考になります。