Json形式での出力
Jsonアクションヘルパーは、与えられたデータをJSON形式に変換して、デフォルトではレスポンスとして返す機能を提供します。最も単純なのは、配列をそのまま与える利用方法です。
public simplejsonAction() {
$this->_helper->json(array('a'=>'alpha', 'b'=>'beta');
}
▼
{"a":"alpha", "b":"beta"}
このように、単純にJSON形式でレスポンスが帰って来ます。
実際にはJsonアクションヘルパーは3つまで引数を取ることができます。
$this->_helper->json($data, $sendNow, $options);
それぞれの引数の意味は次のとおりです:
| 引数 | デフォルト値 | 説明 | |||||||||
| data | (省略不可) | JSON形式に変換したいデータ | |||||||||
| sendNow | true | Jsonアクションヘルパーでリスポンスを作成するか、$dataをJSON形式への変換だけを行うか。 | |||||||||
| options | false | その他のオプション、真偽値か配列を渡す。true/falseならレイアウトを有効にするか/無効にするかを切り替える。詳細なオプションを設定したい場合にはここに配列を渡す。
|
これらのうち「sendNow」と「enableJsonExprFinder」について説明を補足します。
先程説明したとおり、Jsonアクションヘルパーはデフォルトでは$dataをJSON形式に変換してそのままリスポンスを作成します(アクションのその後に記述された処理は実行されません)。一方で、Jsonアクションヘルパーを、配列をJSON形式のテキストデータに変換する機能だけを利用したい場合もあると思います。その場合には「sendNow」を「false」に設定すれば、Jsonアクションヘルパーは$dataをJSON形式に変換する処理だけを実行し、変換された結果を返します。
JSON形式には、コールバックなどに使う関数を埋め込むことがあります。これらの関数は通常のデータと違い、引用符(")で囲わないため、変換する際には特別に処理する必要があります。Zend Frameworkでは、このような関数を扱うためのZend_Json_Exprクラスがあります。
このZend_Json_Exprクラスのオブジェクトをどのように処理するかを決定するのが「enableJsonExprFinder」です。このオプションの値がfalseになっている際には、Zend_Json_Exprクラスのオブジェクトは無視されます(出力に含まれません)。
class IndexController extends Zend_Controller_Action
{
...
public function jsonAction()
{
/* 関数はZend_Json_Exprクラスで扱う */
$json_function = new Zend_Json_Expr('function() {'.
'alert("greek alphabets!");}');
$data = array('function' => $json_function,
'alpha','beta','gamma','delta','epsilon','zeta',
...
'upsilon','phi','chi','psi','omega');
/* 関数を出力したい場合の設定 */
$this->_helper->json($data, true,
array('enableJsonExprFinder' => true /* false */));//(1)
}
}
▼
(1)をtrueにした場合
{"function":function() {alert("greek alphabets!");},"alphabeta":["alpha",...
(1)をfalseにした場合
{"function":{},"alphabeta":["alpha",...
このように、関数を埋め込む場合には注意が必要ですが、JSON形式でのレスポンスを簡単に作成することができます。
おわりに
今回は前回紹介した時と比べ、Zend_Controllerコンポーネントにどのような機能が追加されたかを紹介しました。AJAXとの連携が強化されたのが分かると思います。
次回からは、2回に分けて、分散したプロセス間の通信を行うためのZend_Queueコンポーネントについて紹介したいと思います。
