Flex 4.6 与 Amfphp 2.2.1 简洁笔记(一):环境搭建
http://sourceforge.net/projects/amfphp/files/amfphp-2.2.1.zip/download
下载Amfphp,截至到2015.5.16,最新版为2.2.1
得到一个压缩包,根据官方说明,只需要把amfphp-2.2.1/Amfphp目录部署到服务器端即可使用,如果需要,还可以部署amfphp-2.2.1/BackOffice目录,使用Amfphp的ServiceBrowse等功能,详细情形见官方文档不再赘述了。
这里我将在本地Wamp服务器上 Wamp/www/目录下部署Amfphp,把压缩包解压,得到amfphp-2.2.1目录,包括Amfphp、BackOffice以及文档和实例。
这样就得到了Wamp/www/amfphp-2.2.1/Amfphp、Wamp/www/amfphp-2.2.1/BackOffice、
Wamp/www/amfphp-2.2.1/doc等目录了。
新建一个Flex项目,项目选项中,Flex服务器技术选择PHP,填好服务器位置和输出文件夹位置
创建一个名为services-config.xml的XML文件,放在Flex项目源码src文件夹下,XML内容如下
<?xml version="1.0" encoding="UTF-8"?> <services-config> <services> <service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage"> <destination id="amfphp"> <channels> <channel ref="amfphp" /> </channels> <properties> <source>*</source> </properties> </destination> </service> </services> <channels> <channel-definition id="amfphp" class="mx.messaging.channels.AMFChannel"> <endpoint uri="http://localhost/ordersystem/gateway.php" class="flex.messaging.endpoints.AMFEndpoint" /> </channel-definition> </channels> </services-config>
需要注意的是 endpoint uri="xxxxxx"这里要填写你的Amfphp网关php文件所在位置,我这里命名为gateway.php放在项目根目录ordersystem/下
项目属性-Flex编译器-附加的编译器参数中,添加 -services services-config.xml 参数
然后说明gateway.php的内容,根据官方说明,Amfphp默认在它自己部署目录的Services子目录下查找服务,为了把Flex与PHP通信交互的php文件放置在Flex项目的发布目录下,而不是混在Amfphp的部署目录中,我们需要自定义Amfphp的配置。在Flex项目的发布目录Wamp/www/ordersystem/下,创建一个gateway.php文件,其实名称是随意取的,只需注意,Flex项目中services-config.xml中,endpoint 的uri属性要对应此文件的目录位置和文件名。
<?php require_once(dirname(__FILE__).‘\../amfphp-2.2.1/Amfphp/ClassLoader.php‘); $config=new Amfphp_Core_Config(); $config->serviceFolders=array(dirname(__FILE__).‘/services/‘); $gateway=Amfphp_Core_HttpRequestGatewayFactory::createGateway($config); $gateway->service(); $gateway->output(); ?>
gateway.php中,利用require_once和dirname找到并引用Amfphp中的ClassLoader.php,创建Amfphp_Core_Config类的实例,设置自定义的查找Amfphp服务类的位置,这里设置为Flex项目发布位置目录下的services子目录。然后调用
Amfphp_Core_HttpRequestGatewayFactory::createGateway($config),创建gateway,然后调用service和output方法。
这样,Amfphp的基本配置就完成了,Flex项目发布目录的services子目录中Wamp/www/ordersystem/services/,创建自定义的php服务类,暴露公共方法,就可以供Flex远程调用了。
Flex 4.6中,可以使用Netconnect类或是RemoteObject类来调用服务器端php方法。
这里说明RemoteObject的用法。
<fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <s:RemoteObject id="versionRO" destination="amfphp" source="GetVersion"> <s:method name="getVersion" result="onVersionGet(event)" fault="Alert.show(event.fault.faultString);" /> </s:RemoteObject> </fx:Declarations>
在Flex 4.6的Application mxml中的 fx:Declarations中,定义RemoteObject,注意destination设为amfphp,source设置为Wamp/www/services/中 服务php文件中的自定义类名。
s:method 属性定义该类公布的服务方法的名称,result事件处理函数设置为调用成功后处理数据的函数,fault时调用失败后的事件处理器
然后就可以通过 RemoteObject实例.方法(参数)调用服务器端公布的服务方法了
如,这里可以调用versionRO.getVersion();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。