Flexアプリケーションの作成
PHPコードの準備が整ったので、次に、PHPクラスを呼び出すFlexコードを作成することにします。まず、Eclipseの画面右上のアイコンをクリックし、画面がFlex開発パースペクティブになっていることを確認します。そして、flex_php.mxmlファイルを開きます。
ここではサーバと通信するためにRemoteObjectを使用するので、mx:RemoteObjectタグを追加します。destination属性とsource属性の値を「MyService」に設定します(これがPHPのクラス名です)。endpoint属性の値としては、amfphp/gateway.phpファイルのURLを設定します。筆者のマシン環境では、このURLはhttp://localhost/amfphp/gateway.phpになります。また、id属性の値として「myRPC」を入力し、このオブジェクトに名前を付けておきます。完成したコードは次のようになります。
<mx:RemoteObject id="myRPC"
destination="MyService"
source="MyService"
endpoint="http://localhost/amfphp/gateway.php"/>
次に、MyServiceのhelloWorld()メソッドを呼び出し、そして、所定の引数に値を設定するためのコンポーネントが必要となります。ラベル、テキスト入力ボックス、ボタンのレイアウトを整えるために、アプリケーションにmx:HBoxコンポーネントを追加します。ここでは、 TextInputのidを「myText」とし、ボタンのclickイベントから所定のserviceメソッドが呼び出されるように設定します。完成したコードは次のようになります。
<mx:HBox top="10" left="10">
<mx:Label text="Name value:"/>
<mx:TextInput id="myText" width="150"/>
<mx:Button label="Call MyService->helloWorld()" click="myRPC.helloWorld(myText.text)"/>
</mx:HBox>
最後に、結果およびエラーを処理するために、RemotesObjectに何らかのイベントリスナを定義します。MXMLアプリケーションにmx:Scriptタグを追加し、この中にRemoteObjectが結果を返す際に呼び出される関数と、エラーが発生した際に呼び出される関数の2つを定義します。これらの関数は、単にそれぞれの旨を伝えるメッセージを表示するだけです。
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private function resultListener(event:ResultEvent):void {
Alert.show(event.result as String, "Result");
}
private function faultListener(event:FaultEvent):void {
Alert.show(event.fault.faultString as String, "Error");
}
]]>
</mx:Script>
関数が作成できたら、それぞれが所定のイベントを処理できるように設定し、これらをRemoteObjectにリンクさせる必要があります。次に示すタグの最終行を参考にしてください。
<mx:RemoteObject id="myRPC"
destination="MyService"
source="MyService"
endpoint="http://localhost/amfphp/gateway.php"
result="resultListener(event)" fault="faultListener(event)"/>
これでコードの動作検証を行う準備が整いました。ツールバーの「実行」アイコンをクリックし、Flexアプリケーションを起動してみます。アプリケーションがデフォルトのブラウザで開いたら、テキスト入力ボックスに任意の名前を入力し、そのそばのボタンをクリックします。図13に示すような応答が表示されるはずです。


