cakephp1.3でjsonを出力する

2011年8月7日

PHP

この記事はcakephp1.3でjsonを出力する方法について解説しています。

環境

  • cakephp1.3

目次

  1. json出力用のビューを作成する
  2. jsonを出力するための汎用関数をコントローラに記述
  3. _renderJson関数を呼ぶ
  4. ブラウザからアクセス

json出力用のビューを作成する

app/view/ajax/json.ctp

<?php
echo $this->Js->object($contents);

jsonを出力するための汎用関数をコントローラに記述

app/controller/samples_controller.php

<?php
class SamplesController extends Controller {
	var $name = 'Samples';
	var $uses = array();
	var $helpers = array('Js');
	var $components = array('RequestHandler');
	function _renderJson($contents=array(), $params=array()) {
		$params = Set::merge(array(
			'header' => true,
			'debugOff' => true,
		), $params);
		if ($params['debugOff']) {
			Configure::write('debug', 0);
		}
		if ($params['header']) {
			$this->RequestHandler->setContent('json');
			$this->RequestHandler->respondAs('application/json; charset=UTF-8');
		}
		$this->layout = false;
		$this->set(compact('contents'));
		$this->render('/ajax/json');
	}
}

汎用的な処理になるのでapp_controller.php等に処理を記述したほうがよい。

_renderJson関数を呼ぶ

コントローラから先ほど作成した_renderJson関数を呼びます。
SamplesControllerにgetjsonアクションを作成。

app/controller/samples_controller.php

class SamplesController extends Controller {
中略…
	function getjson() {
		//データ作成。モデルからfind()した時のデータを意識。
		$data = array();
		$data[]['ModelName'] = array('id'=>'1', 'name'=>'name1');
		$data[]['ModelName'] = array('id'=>'2', 'name'=>'name2');
		$data[]['ModelName'] = array('id'=>'3', 'name'=>'name3');
		//_renderJson関数に渡すためにデータを加工
		$forJson = array();
		foreach ($data as $key1 => $value1) {
			foreach ($value1 as $key2 => $value2) {
				$forJson [] = $value2;
			}
		}
		//json出力
		$this->_renderJson($forJson);
	}
}

ブラウザからアクセス

samplesコントローラーのgetjsonアクションを呼び出します。
下記のようなjsonが出力されます。

[{"id":"1","name":"name1"},
{"id":"2","name":"name2"},
{"id":"3","name":"name3"}]

-技術ブログ
-