SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Zend Framework入門

AJAX機能とのスムーズな連携 - Zend_Controllerの新しいアクションヘルパー -

Zend Frameworkによる実践的なPHPアプリケーション開発 31


Json形式での出力

 Jsonアクションヘルパーは、与えられたデータをJSON形式に変換して、デフォルトではレスポンスとして返す機能を提供します。最も単純なのは、配列をそのまま与える利用方法です。

リスト11 JSON形式でレスポンス(単純な例)
  public simplejsonAction() {
        $this->_helper->json(array('a'=>'alpha', 'b'=>'beta');
  }

 ▼

{"a":"alpha", "b":"beta"}

 このように、単純にJSON形式でレスポンスが帰って来ます。

 実際にはJsonアクションヘルパーは3つまで引数を取ることができます。

$this->_helper->json($data, $sendNow, $options);

 それぞれの引数の意味は次のとおりです:

Jsonアクションヘルパーの引数
引数 デフォルト値 説明
data (省略不可) JSON形式に変換したいデータ
sendNow true Jsonアクションヘルパーでリスポンスを作成するか、$dataをJSON形式への変換だけを行うか。
options false その他のオプション、真偽値か配列を渡す。true/falseならレイアウトを有効にするか/無効にするかを切り替える。詳細なオプションを設定したい場合にはここに配列を渡す。

オプション デフォルト値 概要
keepLayouts false レイアウトを有効にするか
enableJsonExprFinder 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クラスのオブジェクトは無視されます(出力に含まれません)。

リスト12 JSON形式でレスポンス(IndexController.php)
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コンポーネントについて紹介したいと思います。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5631 2011/01/07 16:20

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー