用个简单的实例来说明下吧,实例的效果是向服务的helloPerson方法传递一个Person对象,然后此方法返回一个包含传递过去的Person对象信息的字符串。由于只说明如何使用RemoteObject向AMFPHP传递对象,所以就没必要弄一个真正的数据表了。
首先先说AMFPHP关于和AS脚本之间类映射的步骤和过程。 既然是从FLEX向AmfPHP的映射,首先先建立一个AS的类,内容大致如下:
package test
{
[RemoteClass (alias="test.Person")] //这句话一定要有,声明这是个需要远程传递的类
[Bindable]
public class Person {
public var name:String;
public var age:uint;
}
}
其次建立与他对应的PHP类文件,一般来说类文件名应该与AS类名对应,但也可以不对应,具体可以参考amfphp/advancedsettings.php 这个文件里的$incoming变量,一目了然!它还包含了放置映射类的位置!默认应放置在amfphp/services/vo下,就我们这个例子而言,应该先在映射类目录vo下建立文件夹test,再在test目录下建立PHP类Person.php,内容如下:
<?php
class Person {
public $name;
public $age;
}
?>
很简单,呵呵。
第三步,建立测试程序的amfphp服务类,当然能看到这篇文章的都知道服务类应放置到amfphp/services目录下,在这里,我们建立文件HelloPerson.php,他只包含一个helloPerson方法,内容如下:
<?php
class HelloPerson {
public function helloPerson( $pPerson ) { //不用把刚才的Person.php包含进来,amfphp会自动载入
if ( !is_a ( $pPerson, 'Person' ) ) {
return '参数类型不正确,期待一个Person对象!');
}
return '你好:' . $pPerson->name . ',你的年龄是:' . $pPerson->age;
}
}
?>
OK,服务完成。
最后一步,建立一个mxml文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" backgroundColor="#ffffff"
horizontalAlign="center" verticalAlign="top"
creationComplete="initApp()">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
import test.Person;
private var person:Person;
private function initApp():void {
person = new Person();
person.name = '马小玲';
person.age = 28;
}
private function handlerResult( evt:ResultEvent ):void {
Alert.show( evt.result.toString(), '提示' );
}
private function handlerFault( fault:FaultEvent ):void {
Alert.show(fault.fault.faultString, fault.fault.faultCode.toString());
}
private function sendPerson():void {
ro.getOperation( 'regardsPerson' ).arguments.arg1 = person;
ro.getOperation( 'regardsPerson' ).send();
}
]]>
</mx:Script>
<mx:RemoteObject id="ro" endpoint="http://localhost/amfphp/gateway.php"
showBusyCursor="true" destination="amfphp"
source="HelloPerson">
<mx:method name="regardsPerson" result="handlerResult(event)" fault="handlerFault(event)">
<mx:arguments><arg1></arg1></mx:arguments>
</mx:method>
</mx:RemoteObject>
<mx:VBox>
<mx:Label id="response" text="返回内容将显示在这里" />
<mx:HRule />
<mx:Button label="发送" click="sendPerson()" />
</mx:VBox>
</mx:Application>
至此用RemoteObject传递对象到AMFPHP实例结束!所有代码本人都有测试,没有问题的。
另推荐还是看官方文档(http://www.amfphp.org/docs)来的好些,虽然文档太老了- -!。
转自:http://hi.baidu.com/needyu/blog/item/3ce52aa4da7a25f09152ee74.html