Flash 与 php 使用 amfphp
创建 Flash 项目
使用 Flash Builder 创建一个项目。
创建 Flash 项目时,选择服务器技术为 PHP,并配置好服务器的 Web 根文件夹及根 URL 地址(这里设置根文件夹时,文件夹名称要与项目名称不同)。然后将输出文件夹放在根文件夹内。
项目创建完后,可以加上一个 Button 来测试一下是否正确创建。代码如下:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ protected function buttonClick(event:MouseEvent):void { button.label = "hello"; } ]]> </fx:Script> <s:Button id="button" label="Click Me" click="buttonClick(event)"/> </s:Application>
代码输入完成,运行(Ctrl+F11)应该正赏,然后进行 amfphp 的配置。
amfphp 配置
从 http://www.silexlabs.org/amfphp/ 下载 amfphp。本博下载的是 amfPHP 2.1 版本。
将下载的压缩包中 Amfphp, BackOffice 放入到 Web 根文件夹中。此时 Web 根文件夹中应该有如下几个文件:
f:/project/agiletaskweb/ +- BackOffice +- Amfphp \- bin-debug
输入 http://localhost/Amfphp 可以看到
点击链接 If you are looking for the ... 可以看到已经提供的服务:
接下来,加上自己的服务。在 Amfphp/Services 目录中创建一个 MyService.php 内容如下:
<?php class MyService { public function echoback($param){ return $param; } } ?>
这是一个将传入的参数返回给客户端的服务(echo 服务)
再刷新服务列表界面,可以看到创建的服务已经生效。
使用 RemoteObject 调用服务
回到 Flash Builder,将主文件的代码修改为如下:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; protected function buttonClick(event:MouseEvent):void { remoteObject.echoback("Receive from MyService"); } protected function resuleHandler(event:ResultEvent):void { button.label = event.result.toString(); } protected function falseHandler(event:FaultEvent):void { button.label = "Fault"; } ]]> </fx:Script> <fx:Declarations> <s:RemoteObject id="remoteObject" destination="amfphp" source="MyService" endpoint="http://www.agiletask.com/Amfphp/" result="resuleHandler(event)" fault="falseHandler(event)"/> </fx:Declarations> <s:Button id="button" label="Click Me" click="buttonClick(event)"/> </s:Application>
运行,点击按钮,即可以正确显示从服务器传回来的结果。
RemoteObject 的主要变量:
endpoint # 指定服务所在 URL,指定为 http://domain/Amfphp destination # 指定服务处理类,指定为 amfphp source # 指定服务名称(与 Amfphp/Services 目录中的名称对应)