Qbilinux 日記

Linux に関係することだけではなく,最近は一般的なコンピュータやガジェット関係についても記載してます.

cakephp3 での json, xml 出力

cakephp3 での json, xml 出力についてですが,まぁ,ドキュメント通りにすれば出力できますけど,メモ代わりに.

とりあえず,出力したい Controller の initialize() に

$this->loadComponent('RequestHandler');

を追記.全部の場合には AppController の initialize() に追加しておけばいいでしょう.

で,config/routes.php あたりに

Router::extensions(['json', 'xml']);

を追加.json, xml 両方指定する必要はなくって必要なものだけでオッケーですね.

あとは _serialize 変数に渡したい変数を記述すればいいです.

src/Controller/HogeController.php

public function index() {
    $hoge = $this->find()->all();
    $this->set('_serialize', ['hoge']);
}

な感じかな.すでに普通の記述があって,ぜーんぶ渡しちゃっていい場合には AppConfig に

public function beforeRender(Event $event)
{
    if (!array_key_exists('_serialize', $this->viewVars) &&
        in_array($this->response->type(), ['application/json', 'application/xml'])
        ) {
            $this->set('_serialize', true);
        }
}

を付け加えてもいいのかも.'_serialize' を true に設定すると全部の変数がわたりますね.あ,cakephp 3.1.0 以降のフィーチャーです.json, xml 判別のあたりは適当に書き換えてください.

_serialize を使わずに,普通に template の src/Template/Articles/json/index.ctp のファイル中で

foreach ($articles as &$$article) {
    unset($article->generated_html);
}
echo json_encode(compact('articles'));

ってやっても良いみたい.

もっと詳しいことは...やっぱりマニュアルを見てください.日本語化はされてないみたいだけどね.:-)