flex整合php实现一个简单的名片浏览
1.直接去官网[url]http://amfphp.sourceforge.net[/url]下载一个amfphp.zip,并将其直接加压至php文件部署目录下,例如:http://localhost/amfphp
2.将数据库中的用户列表通过Remoting的方式发送给Flex,可新建文件[color=red]getUserService.php[/color],并将其保存在amfphp目录下的services文件夹中,代码如下:
<?
class getUserService{
function [color=red]getUsers[/color](){
mysql_connect("localhost","root","123");
mysql_select_db("test");
mysql_query("SET NAMES UTF8");
$sql = "select * from userinfo";
return mysql_query($sql);
}
}
?>
3.修改amfphp目录下的gateway.php文件,设置数据传输时的编码格式。
找到该文件的127行,如下所示:
$gateway->setCharsetHandler("utf-8decode", "ISO-8859-1", "ISO-8859-1");
默认采用的编码是针对法语和德语等语言,需将其修改为支持中文、英文的编码,如下:
$gateway->setCharsetHandler("none", "ISO-8859-1", "ISO-8859-1");
经过以上步骤,服务器端的工作就完成了,接下来修改客户端的代码,在编写Flex代码前,先创建一个services_config.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="[color=red]my-amfphp[/color]"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="[color=red]my-amfphp[/color]" class="mx.messaging.channels.AMFChannel">
<endpoint uri="[color=red]http://localhost:/amfphp/gateway.php[/color]" class="flex.messaging.endpoints.AMFEndPoint"/>
</channel-definition>
</channels>
</services-config>
4.services_config.xml文件描述了远程服务的配置信息,供Flex识别服务器信息。修改好后把该文件放在程序flex_php的目录下,然后修改程序的属性,添加编译参数,在-local en_US后面加上配置文件地址,如下:
-local en_US -services services_config.xml
至此,完成了Remoting的所有相关的配置,下面是程序flex_php代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()" fontSize="12">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.managers.CursorManager;
//初始化程序,调用远程方法
private function initApp():void{
service.getOperation('getUsers').send();
}
//得到结果,传给List控件
private function resultHandler(evt:ResultEvent):void{
CursorManager.removeBusyCursor();
myList.labelField = "name";
myList.dataProvider = evt.result;
}
//服务器错误信息
private function faultHandler(evt:FaultEvent):void{
trace("fault:"+evt.fault);
}
//点击用户,切换信息
private function selectHandler(evt:Event):void{
var user:Object = myList.selectedItem;
userPanel.title = "详细信息"+user.name;
user_txt.text = user.name;
email_txt.text = user.email;
url_txt.text = user.url;
}
]]>
</mx:Script>
<!-- 定义RemoteObject对象 -->
<mx:RemoteObject id="service" fault="faultHandler(event)" showBusyCursor="true" source="[color=red]getUserService[/color]"
destination="amfphp">
<!-- 定义远程方法 -->
<mx:method name="[color=red]getUsers[/color]" result="resultHandler(event)"/>
</mx:RemoteObject>
<mx:Panel id="userPanel" x="256" y="104" width="307" height="289" layout="absolute" title="详细信息"
horizontalAlign="center" verticalAlign="middle">
<mx:Label id="user_txt" x="10" y="23" fontWeight="bold"/>
<mx:Label id="email_txt" x="10" y="90"/>
<mx:Label id="url_txt" x="10" y="165"/>
</mx:Panel>
<mx:Panel x="77" y="104" width="171" height="386" layout="absolute" title="名册">
<mx:List id="myList" x="10" y="10" width="131" height="326" change="selectHandler(event)"></mx:List>
</mx:Panel>
</mx:Application>
1.直接去官网[url]http://amfphp.sourceforge.net[/url]下载一个amfphp.zip,并将其直接加压至php文件部署目录下,例如:http://localhost/amfphp
2.将数据库中的用户列表通过Remoting的方式发送给Flex,可新建文件[color=red]getUserService.php[/color],并将其保存在amfphp目录下的services文件夹中,代码如下:
<?
class getUserService{
function [color=red]getUsers[/color](){
mysql_connect("localhost","root","123");
mysql_select_db("test");
mysql_query("SET NAMES UTF8");
$sql = "select * from userinfo";
return mysql_query($sql);
}
}
?>
3.修改amfphp目录下的gateway.php文件,设置数据传输时的编码格式。
找到该文件的127行,如下所示:
$gateway->setCharsetHandler("utf-8decode", "ISO-8859-1", "ISO-8859-1");
默认采用的编码是针对法语和德语等语言,需将其修改为支持中文、英文的编码,如下:
$gateway->setCharsetHandler("none", "ISO-8859-1", "ISO-8859-1");
经过以上步骤,服务器端的工作就完成了,接下来修改客户端的代码,在编写Flex代码前,先创建一个services_config.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="[color=red]my-amfphp[/color]"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="[color=red]my-amfphp[/color]" class="mx.messaging.channels.AMFChannel">
<endpoint uri="[color=red]http://localhost:/amfphp/gateway.php[/color]" class="flex.messaging.endpoints.AMFEndPoint"/>
</channel-definition>
</channels>
</services-config>
4.services_config.xml文件描述了远程服务的配置信息,供Flex识别服务器信息。修改好后把该文件放在程序flex_php的目录下,然后修改程序的属性,添加编译参数,在-local en_US后面加上配置文件地址,如下:
-local en_US -services services_config.xml
至此,完成了Remoting的所有相关的配置,下面是程序flex_php代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp()" fontSize="12">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.managers.CursorManager;
//初始化程序,调用远程方法
private function initApp():void{
service.getOperation('getUsers').send();
}
//得到结果,传给List控件
private function resultHandler(evt:ResultEvent):void{
CursorManager.removeBusyCursor();
myList.labelField = "name";
myList.dataProvider = evt.result;
}
//服务器错误信息
private function faultHandler(evt:FaultEvent):void{
trace("fault:"+evt.fault);
}
//点击用户,切换信息
private function selectHandler(evt:Event):void{
var user:Object = myList.selectedItem;
userPanel.title = "详细信息"+user.name;
user_txt.text = user.name;
email_txt.text = user.email;
url_txt.text = user.url;
}
]]>
</mx:Script>
<!-- 定义RemoteObject对象 -->
<mx:RemoteObject id="service" fault="faultHandler(event)" showBusyCursor="true" source="[color=red]getUserService[/color]"
destination="amfphp">
<!-- 定义远程方法 -->
<mx:method name="[color=red]getUsers[/color]" result="resultHandler(event)"/>
</mx:RemoteObject>
<mx:Panel id="userPanel" x="256" y="104" width="307" height="289" layout="absolute" title="详细信息"
horizontalAlign="center" verticalAlign="middle">
<mx:Label id="user_txt" x="10" y="23" fontWeight="bold"/>
<mx:Label id="email_txt" x="10" y="90"/>
<mx:Label id="url_txt" x="10" y="165"/>
</mx:Panel>
<mx:Panel x="77" y="104" width="171" height="386" layout="absolute" title="名册">
<mx:List id="myList" x="10" y="10" width="131" height="326" change="selectHandler(event)"></mx:List>
</mx:Panel>
</mx:Application>