SHOEISHA iD

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

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

Zend Framework入門

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

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


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード 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クラスのオブジェクトとして渡していますが、このようにオブジェクトをデータの受け渡しにはコツがあります。こちらについては、後からもう少し詳しく説明します。

次のページ
サーバ側のコードを理解する

修正履歴

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4030 2009/12/03 12:15

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング