この記事はcakephp1.3でjsonを出力する方法について解説しています。
環境
- cakephp1.3
目次
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"}]