CodeZine(コードジン)

特集ページ一覧

PHPアプリからFlashコンテンツにアクセスしよう - Zend_Amf -

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/06/30 14:00

ダウンロード sample.zip (205.0 KB)

目次

Zend_Amfを使っての通信

 それでは実際にZend_Amfを使った例を見てみましょう。ここではFlashアプリ内のボタン[Send to Zend Amf]を押すとサーバへリクエストが渡り、そこから返ってきたメッセージをFlashアプリ右側のテキストエリアに表示するという、簡単なやりとりを見てみます(図3)。

図3:サンプルを実行した結果
図3:サンプルを実行した結果

Flash側のコードを理解する

 まず、Flashアプリのソースコードから見ていきましょう。リスト3にFlashアプリのユーザーインターフェースの一部を示します。(2)のボタンはクリックされるとclick属性に記述されているようにsend関数を呼び出し、(1)に格納されたテキストを送信します。また、(3)にはidmessageであるテキストエリアがあり、PHPから帰ってきたメッセージを表示するようになっています。

[リスト3]Flashアプリのユーザインタフェース(ZendAmfFlex.mxmlc 後半の一部)
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
...
         <!-- (1) 送信テキスト -->
         <mx:Text width="100%" color="blue"
                    text="Zend Amf と Flex のテスト"/>

         <!-- (2) ボタン -->
     <mx:Button id="iconButton" label="Send to Zend Amf"
            paddingLeft="12" paddingRight="18" labelPlacement="right"
            color="#993300" click="send();"/>
...
        <!-- (3) テキストエリア -->
        <mx:TextArea id="message" text="" editable="false"
             height="100%" width="100%"
             color="#0000FF"/>
...
</mx:Application>

 リスト4は、Zend_Amfと実際にやりとりする部分のコードです。(1)にはリスト3の(2)から呼び出されるsend関数が記述されています。(2)にはZend_Amfからの応答が返ってきた場合の処理が、(3)には通信に失敗した場合の処理が記述されています。

[リスト4]Zend_Amfと通信する部分(ZendAmfFlex.mxmlc 前半)
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<!-- Zend_Amfと実際にやりとりするAction Script -->
    <mx:Script>
        <![CDATA[
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
import mx.controls.Alert;

/* (1) AMF3形式でデータを送る */
private function send():void {
  //(1-1)結果に応じたコールバック関数を登録したオブジェクト
  var responder:Responder = new Responder(onSuccess, onFailure);
  //(1-2)Zend_Amfとの接続のためのオプジェクト
  var nc:NetConnection = new NetConnection();
  //(1-3)Zend_AmfのURLを指定
  nc.connect('http://localhost/index/amf');
  //(1-4)AMF3 でエンコードするように指定
  nc.objectEncoding = ObjectEncoding.AMF3;


  //(1-5)渡すデータを作成
  var params:DataAS = new DataAS;
  params.data = texttosend.text;

  //(1-6)Zend_AmfにgetHelloStringをリクエスト
  nc.call('HelloWorld.getHelloString', responder, params);
}
/* (2) 成功時の処理 */
private function onSuccess(ret:*):void {
  if (typeof ret == 'string') {
     //テキストエリアに帰って来た文字列を追加
     message.text = message.text + ret;
  }
}
/* (3) 通信に失敗した時の処理 */
private function onFailure(ret:*):void {
  Alert.show('通信に失敗');
}
      ]]>
    </mx:Script>
...

 (1)の処理をもう少し詳しく見ていきましょう。ここでは最後の(1-6)にあるnc.callでZend_AmfにHelloWorldサービスのgetHelloStringメソッドの処理をリクエストしていて、その前の部分はそのリクエストのための準備となります。

 (1-1)では、nc.callの結果に応じた処理を行うコールバックを登録するためのオブジェクトを生成しています。nc.callの処理が成功した場合は(2)のonSuccessを、失敗した場合には(3)onFailureを呼び出すようにしています。

 (1-2)ではZend_Amfに接続するためのオブジェクトを生成し、(1-3)で接続先のアドレスを指定しています。また、(1-4)ではリクエストの形式を指定しています。

 (1-5)ではリクエストの際に送るデータを作成しています。ここではデータをDataASクラスのオブジェクトとして渡していますが、このようにオブジェクトをデータの受け渡しにはコツがあります。こちらについては、後からもう少し詳しく説明します。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

修正履歴

  • 2009/10/18 21:45 必要な環境の「PHP5.1.4以降」を「PHP5.2.3以降」に修正しました(Zend Framework 1.7以降に必要).

バックナンバー

連載:Zend Framework入門

もっと読む

著者プロフィール

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

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

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5