amfphp是由adobe公司开发的一个开源的项目,用于php与flex通讯的工具类。
amfphp的使用比较简单,只要在官网下载后,解压即可使用,具体的使用方法就不在这里赘述了,要了解
的朋友可以上官网或是下载视频了解(个人推荐 "郑岩峰"关于flex的视频,讲解的比较细).
这里主要是要讲一下amfphp与php的通讯的两种方法:
1. NetConnection + Responder
2. Remoting Object
一、NetConnection + Responder 的连接方式
1.先定义一个NetConnection变量
2.连接NetConnection
3.调用连接的call方法,以调用服务器上的类及方法。方法是:conn.call("服务器的类.类中的方法",new Responder(处理成功的方法,处理失败的方法,参数1, 参数2,...));
如下:
private var conn:NetConnection = new NetConnection();
conn.connect("http://localhost/amfphp/gateway.php");
conn.call("HelloWorld.sayHello",new Responder(success,fault),var1,var2....);
然后定义成功与失败的方法
public funciton success(result:Object):void {
//TODo //这里的result由于是一个对象,所以可以转换为任意格式,不过也要根据远程服务传回的内容相对应
}
public function fault(result:Object):void {
//TODO
}
第一种方法就是那么简单。
二、远程对象 Remoting Object
用这个Remoting Object 就比较复杂一些了,不过确是推荐的方法,因为php自4.0以来就支持面向对象的编程了,所以
用远程对象的方法会使传输的数据内容更加丰富,对以后的维护也更加的方便 。
1. 先写一个service-config.xml 文件,如果不会写这个文件,在browse下有相应的例子,如下:
service-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="sabreamf-flashremoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://flashservices/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
这里最主要是的定义channel,由于一般来说,都是使用一个gateway.php的,所以一般定义一个channel就行了,当然了,如果有多个服务器的话,可以写多个channel。
这个文件主要要修改的地方就是那个 endpoint 下的 uri 地址,其他的基本不用改变。
这里我们要将这个uri 定义成我们服务器中使用的gateway的地址
http://localhost/amfphp/gateway.php
这样service-config.xml 就写好了。
要将这个文件放置在调用远程服务的mxml同一个目录下。
2. 定义我们的mxml 文件
在mxml中定义一个RemoteObject如下:
<mx:RemoteObject id="service" fault="onFault(event)" source="HelloWorld" destination="amfphp">
<mx:method name="sayHello" result="onResult(event)"/>
</mx:RemoteObject>
在这里定义一个RemoteObject 定义id 为service ,一会使用服务的时候,就要用到这个id.
fault 是指当失败时,要调用什么方法,这里的方法要传入一个事件。
source 是指远程的服务的类名
destination 是指我们在 service-config.xml 中定义的关于channel的destination
然后在RemoteObject 中定义方法
name 是指远程服务的类下的方法,像我们这里定义 的是HelloWorld 类,这个类下有一个叫sayHello的方法.
result 是指当成功时,要调用哪个方法,这个方法也要传入一个事件
如果这个类下有多个方法时,我们可以将所有的方法都写在这里面。
然后要我们就可以定义一个按钮去触发这个连接了,如下:
<mx:TextArea id="amfphptest" width="200" height="107"/>
<mx:Button label="call amfphp" click="service.getOperation('sayHello').send(amfphptest.text)" />
在这里我们定义了一个文本框 ,用于传入参数及显示服务器中返回的结果。
在Button中,当click时,调用我们定义的 RemoteObject的id 即 service
service.getOperation('sayHello').send(amfphptest.text)
是指调用 RemoteObject 中的sayHello方法,send是指传送参数,如果有多个参数则用逗号分隔
如果RemoteObject中有多个方法时,可以再定义几个按扭以触发这些方法。
下面是成功与失败的方法:
private function onResult (evt:ResultEvent):void {
amfphptest.text = evt.result.toString();
}
private funciton onFault(evt:FaultEvent):void {
amfphptest.text = evt.result.toString();
}
可以看来事件的result方法是返回的内容。
至些mxml 的内容就是那么多。
这里必须要特别注意的一点,必须要确保以下两个步骤正确才能正常运行这个实例
(1). Flex的项目的 Flex Build Path 即是 库中必须引进一个 rpc.swc 包
(2). 在 Flex 项目属性的 Flex Compiler 即是编译选项中的 Additional compiler argments 中加入
-locale en_US -service "service-config.xml" ,即是将我们的destination加入到编译中去。
上面的实例中,只是返回了字符串,但是我们用的是Remoting Object 即是远程对象,这明显不能
证明Remoting Object的功能的强大,下面我们就定义对象来传递内容的例子做一个说明:
3. RemotingObject 复杂一点的例子
(1) 先我们要定义一个as 类
package bean {
[RemoteClass(alias="bean.Person")]
[Bindable]
public class Person {
public var firstName:String;
public var lastName:String;
public var phone:String;
public var email:String;
}
}
这里定义了一个类,就是一个实例类,定义为可绑定
同时,指定别名,即是远程服务器中的service下也有一个bean文件夹,下面也有一个Person类,
即是表示当前类与服务器中的哪一个类相对应。
(2)创建一个服务端的Person类,我们要在service下的 bean下创建
class Person {
var firstName:String;
var lastName:String;
var phone:String;
var email:String;
//explicit actionscript package
var $_explicitType = "bean.Person";
}
这里定义的php的Person 类
可以看到这里除了正常的属性外,还有一个叫$_explicitType属性,
这里就是指定该类与Flex中的哪个类相对应
上面两步说明了一点,就是要将两个类进行挂钩。
这样,就将两个对象对应起来了,所以就可以将这两个对象进行互传,到时将会由amfphp对其进行自动转换。
(3)定义一个 提供服务的类 PersonService,将其与Person放在同一个目录下
<?php
include("Person.php");
class PersonService {
/**
* get a list of perple
* @return an array of person
*/
function getList() {
$person = array (
array("Huang","wenzhou","13512312","123@qq.com");
array("Yang","Yi","2342234","1233@qq.com");
)
$p = array();
for($a=0;$a<count($person);$a++) {
$person = new Person();
$person->firstName = $person[$a][0];
$person->lastName = $person[$a][1];
$person->phone = $person[$a][2];
$person->email = $person[$a][3];
$p[]=$person;
}
return $p;
}
}
?>
(4) 定义我们的 mxml 文件
定义RemoteObject
如下
<mx:RemoteObject id="myservice" source="bean.PersonService"
destination="amfphp" fault="faultHandler(event)" showBusyCursor="true">
<mx:method name="getList" result="getListHandler(event)" fault="faultHandler(event)" />
</mx:RemoteObject>
可以看到这里有些许的不同了:
source = bean.PersonService 即是我们的服务层是在bean下的PersonService
destination = amfphp 还是我们之前定义的destination
showBusyCursor = true 是指当我们调用服务时,页面上是否显示正忙的提示。
方法与前面的也差不多。
定义显示数据的DataGrid
<mx:DataGrid x="10" y="10" width="345" id="people_list" dataProvider="{dp}" change="changeHandler(event)">
<mx:columns>
<mx:DataGridColumn headerText="Last name" dataField="lastName"/>
<mx:DataGridColumn headerText="First name" dataField="firstName"/>
<mx:DataGridColumn headerText="Telephone" dataField="phone"/>
<mx:DataGridColumn headerText="Email" dataField="email"/>
</mx:columns>
</mx:DataGrid>
这里要先定义一个 dp,是一个ArrayCollection,这里是要放即一个个的Person
由于之前我们已经将Person.as 与 Person.php 两个对象已经挂钩了,所以这里amfphp会自动将其进行转换。
这里的DataGrid 会有一个change事件, 当用户点击时,将选中的结果显示出来。
这里最后我们看一下我们的成功及失败的方法如何定义。
private function getListHandler(evt:ResultEvent):void {
dp = new ArrayCollection(ArrayUtil.toArray(evt.result));
}
我们再定义我们的 button
<mx:Button x="290" y="357" label="get list" click="myservice.getOperation('getList').send();"/>
复杂的RemoteObject 就完成了。
分享到:
相关推荐
AMFPHP(Action Message Format for PHP)是一种PHP扩展,它允许服务器端的PHP代码与客户端的Flex应用程序进行高效、低延迟的数据交换。Flex是Adobe开发的一款用于构建富互联网应用程序(RIA)的框架,它主要使用...
AMFPHP(Action Message Format for PHP)是一种高效的数据交换协议,它允许Flex(一种用于构建富互联网应用程序的框架)与服务器端的PHP进行快速、低级别的数据通信。 描述中的"liaison entre le php et flex"法语...
AMFPHP支持这两种格式,使得PHP服务器可以无缝地与使用AMF的客户端如Flex进行通信。 **AMFPHP的功能与优势** 1. **高性能通信**:AMFPHP通过AMF协议提供低延迟、高效率的数据传输,使PHP服务端和Flex前端之间的交互...
Flex AMFPHP 1.9 是一款用于连接Adobe Flex与PHP服务器端的开源框架,它提供了高效的二进制数据交换格式AMF(Action Message Format),从而实现Flash客户端与PHP服务端之间的快速通信。AMF是一种低级的数据表示格式...
AMF是一种二进制数据格式,主要用于提高Flash/Flex应用程序与服务器之间数据交换的效率和性能。在本文档中,我们将深入理解AMF、Flex以及它们与PHP结合的应用。 **AMF(Action Message Format)**: AMF是Adobe公司...
AMFPHP 2.1.1 是一个强大的PHP框架,专为实现Adobe Flex与PHP之间的高效数据通信而设计。这个框架允许开发人员使用Action Message Format (AMF)协议,这是一种二进制数据格式,用于在服务器和客户端之间传输数据,...
1. **AMF协议**:AMF是Adobe开发的一种二进制数据序列化格式,它允许数据以高效的方式在网络上传输。AMF分为两种版本,AMF0和AMF3,myAMFPHP支持两者。AMF能将复杂的数据结构(如对象、数组、日期等)转换为字节流,...
AMFPHP(Action Message Format for PHP)是一种开源的PHP框架,专为PHP和Adobe Flex、Adobe AIR以及Flash Player之间的高效、高性能的双向通信提供服务。它允许开发者在服务器端使用PHP来创建和处理数据,同时在...
Flex与AMFPHP通信是一种常见的在富互联网应用(RIA)中实现服务器端数据交互的方式。Flex作为Adobe开发的开源框架,主要用于构建具有丰富用户界面的Web应用,而AMFPHP则是一个快速、轻量级的PHP框架,它允许Flex...
AMFPHP的核心目标是提供一种比传统HTTP或SOAP协议更快、更轻量级的方式来实现Web服务。 Apache是世界上最流行的Web服务器软件,而PHP是一种广泛使用的开源脚本语言,特别适合于Web开发。将AMFPHP与Apache和PHP结合...
AMFPHP(Action Message Format for PHP)是一种高效的数据交换协议,它允许Flex、Flash或ActionScript 3.0与PHP应用程序之间进行快速、低开销的通信。在本入门教程中,我们将了解如何安装和使用AMFPHP以及创建简单...
AMFPHP,全称为Action Message Format for PHP,是一款开源项目,旨在实现Action Message Format(AMF)协议,以便于PHP与Adobe Flash Player之间进行高效、低开销的数据交换。AMF是一种二进制序列化格式,它允许...
4. **兼容性**:AMFPHP 2.2.2 应该与各种版本的Flash Player和Flex SDK兼容,同时支持AMF0和AMF3两种AMF版本,以适应不同客户端的需求。 5. **性能优化**:作为成熟版本的2.2.2,AMFPHP可能已经过优化,以减少处理...
标题 "PHP+Flex+amfphp实现天气预报" 指出的是一个使用PHP作为后端服务器语言,Flex作为前端用户界面技术,并结合amfphp框架来构建的天气预报应用程序。这个项目可能涉及到以下几个关键知识点: 1. PHP:这是一种...
6. **兼容性**:AMFPHP不仅与Flash Player兼容,还支持Flex和Air应用,覆盖了大部分Adobe富互联网应用(RIA)的开发场景。 在"amfphp 1.9"版本中,可能包含了以下组件和改进: - **核心库**:这是AMFPHP的核心代码...
不想传递拆分字符串,解析串行XML了吧? 厌烦JSON了? 试试AMF吧,传送多种数据格式。
AMFPHP(Action Message Format for PHP)是一个开源项目,旨在为PHP开发者提供与Adobe Flash Player、Flex或其他AMF支持的客户端进行高效、低延迟的双向通信的能力。"amfphp-example"是AMFPHP框架的一个示例,它...
### AMFPHP与Flash的交互详解 #### 一、引言 随着互联网技术的发展,不同技术栈之间的交互变得越来越重要。AMFPHP作为一种强大的PHP框架,可以实现Flash应用程序与服务器端脚本之间的高效通信。本文将详细介绍如何...
使用 RemoteObject 与 AMFPHP 进行通信是 Flex 应用程序与 PHP 后端进行交互的另一种方式。示例 1:简单的数据通信(amfphpHello2Demo),展示了如何使用 RemoteObject 与 AMFPHP 实现简单的数据交互。示例 2:复杂...
AMFPHP 1.9 和 Flash 是两个与Web开发密切相关的技术,它们在构建富互联网应用程序(RIA)中发挥着重要作用。AMFPHP 是一个开源的PHP框架,它允许服务器端的PHP代码与客户端的Flash或Flex应用进行高效的数据交换。...