CakePHP 2.xでLayoutとViewを書かずにJsonでAjax

前置き

CakePHPでAjaxをしたかった。ついカッとなってやった。

参考にしたページ

公式ドキュメントどすなぁ
JSONとXMLビュー — CakePHP Cookbook 2.x ドキュメント

手順

  1. routes.phpにRouter::parseExtensions('json');を記述
    • 既に書いてある場合は、引数を('xml', 'json')みたいな感じに追記すればオッケー
  2. Controllerにpublic $components = array('RequestHandler');を追記
    • 使用するコントローラーに書けばいいけど、全体に適用するならAppControllerでもいいね
    • posts/index.json のように.jsonでリクエストを受けた時にJsonViewクラスを適用してくれる
    • application/json でリクエストを受けた時も同様にJsonViewを適用してくれる(らしい)
  3. Actionに書くことは2つ
    • $this->set(compact('posts')); または $this->set('posts', $posts); で変数を渡す
    • $this->set('_serialize', array('posts')); で指定した変数をjson_encodeして出力
    • 2つめの_serializeを書かないと、普通にactionname.ctpのビューファイルを読みにいくので注意

感想

うーん、なんと簡単。ドキュメントにも書いてある通り複雑なことも出来るけど、これだけの記述でさっくり書けるのは魅力的。Ajax Lifeが捗りますな…

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です