CakePHP2でJSON

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については下記が参考になります。

同じタグの記事: CakePHP2
同じタグの記事: JSON
同じタグの記事: PHP
同じカテゴリの記事: Linux
関連書籍: PHP