• Flex<-->PHP by AMFphp - [笔记]

    2009-11-06

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://tangtun.blogbus.com/logs/50442825.html

    因为要参加创新实践的骗学分项目,所以开始研究Flex开发。
    昨天一下午都在研究如何与PHP后台通信,其实并不难,只是自己走了些弯路。
    当然,方法有很多,今天要介绍的是使用AMFPHP Remoting进行整合的方法。

    从零开始,先来看看我们需要准备些什么吧。

    Wamp Server 下载


    Windows系统
    Apache服务器
    PHP后台脚本
    MySQL数据库
    傻瓜安装 无需配置
    一步到位 简单环保
    Adobe FlexBuilder 3 下载


    Flex集成开发环境(IDE)
    他使用MXML进行布局描述
    Actionscript进行逻辑编程
    很像HTML和javascript的关系
    PHP Designer 下载

    一款PHP的集成开发环境(IDE)
    简单轻巧 易于上手

    AMFphp Remoting 下载

     
    本篇的重点
    针对PHP的AMF Remoting

     

    Step1:安装Wamp Server

    具体的做法这篇文章里已经讲得很清楚了。
    如果你不知道你的80端口被谁占了,可以看这篇
    或者干脆下一个ActivePorts来干掉它。

     

    Step2:安装AMFphp

    把下载好的AMFPHP解压到wamp\www下。
    在浏览器里输入http://localhost/amfphp/browser

     

    Step3:写一个简单的php

    这里可以用刚才所说的phpDesigner进行编写。
    或者也可以直接拿记事本写完改后缀。
    写完以后保存为helloworld.php放在AMFphp的service文件夹下面让它来用。
    代码如下:

    1
    2
    3
    4
    5
    6
    7
    <php
    class HelloWorld{
    	function sayhello(){
            return '后台php向发来贺电!';
    	}
    }
    ?>

    搞定之后我们回到http://localhost/amfphp/browser来看看他能不能正常运行。
    这个时候悲剧发生了,我们的中文输出变成乱码了。
    网上搜了一下原来是gateway.php配置的问题,用记事本打开它。
    找到 $gateway->setCharsetHandler( "utf-8_decode", "ISO-8859-1", "ISO-8859-1" );
    改成 $gateway->setCharsetHandler( "iconv", "gb2312", "gb2312" );
    就可以了。这里的三个参数中,第一个代表用来转换编码的php函数,后面两个表示目标编码。
    ISO-8859-1是拉丁字符的标准字符集,gb2312是简体中文国家标准字符集。就是这样啦。

     

    Step4:设定Flex项目的Remoting连接

    我们在FlexBuilder里新建一个项目。
    File->New->Flex Project就是。
    Application server type当然是选PHP咯。

    设定好之后我们开始设定services-config.xml
    这个文件我们可以在amfphp\browser文件夹下找到一个。
    把他拷到Flex项目的文件夹下。并把其中endpoint标签下的uri属性改为http://localhost/amfphp/gateway.php。保存。

    接下来更改一下编译设定,使刚才这个文件参与进去。
    Project->Properties->Flex Compiler
    在Additional compiler arguments中加入-services "services-config.xml"完成设定。
    如果编译时无法检测到,那就干脆把整个文件路径进去吧。
    比如我写的是 -services "F:\学习\Flex\HelloWorldByAmfphp\services-config.xml"

    就要大功告成了。让我们来些最后的Flex程序。我们希望按下按钮去得到的服务器那里的sayhello方法的返回值,放到textarea中。代码很简单,我们来看。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    <?xml version="1.0" encoding="utf-8"?>
    	<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical" fontSize="18">
    	<mx:RemoteObject id="amfphpRemoting"
        destination="amfphp" source="helloworld"/>
    	<mx:TextArea width="400" height="100"
        text="{this.amfphpRemoting.sayHello.lastResult}"/>
    	<mx:Button label="向后台同志们问好"
        click="this.amfphpRemoting.sayHello()"/>
    </mx:Application>
    

    解释一下RemoteObject标签。
    destination对应services-config.xml 文件中的<destination> source对应amfphp/service文件夹下php文件的路径。比如我们的helloworld.php直接放在service根目录下,那就只要写source="helloworld"就行了。如果目录结构是service\firstdemo\helloworld.php那就要写成source="firstdemo.helloworld"

     

    好了大功告成,调试运行一下看看结果。内牛满面了吧。


    参考:
    1.http://blog.corausir.org/for-life-real-life/ausir-573 台湾朋友写的教程,帮到很多。这篇文章很多地方借鉴了它
    2.http://www.sephiroth.it/tutorials/flashPHP/flex_remoteobject/page002.php 另一个老外写的教程,同样很明白,细节上也讲得很清楚。
    3.http://hi.baidu.com/xiaoxiaolq/blog/item/7984dcbfecb4fc0018d81f78.html 这基本是以上那篇的中文翻译
    4.http://www.riachina.com/showtopic-10041.aspx 编码悲剧发生时参考了这里。


    收藏到:Del.icio.us




    评论

  • 学习了,谢谢。我的博客也是关于watir方面的,www.sdgz.cn
    山芋回复网络编程说:
    难不成这就是传说中的spam?
    2009-11-10 14:02:16
  • 额 看不懂 不过做出来的结果真搞笑~
    山芋回复澹泓幽客说:
    要不是为了活泼点还不会发现中文编码的问题嘞
    2009-11-06 23:02:44