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();

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。