10 月
15
2008

Flex直接使用PHP物件──RemoteObject

在Flex中,我們是不能直接與php溝通的,必須要通過http request或是remote的方式來交換數據,速度和安全性上當然是remote佔優勢,HttpService的做法已經用到爛掉了,網路上已經有驚人的資源可以搜尋,但是remoting的方式卻是千奇百怪,這邊使用常見的amfphp來作為flex與php中間的媒介,簡單來說就是一連串的橋接動作,把資料從php一路接來flex前端

因為AS不能直接建立一個PHP物件,所以Flex提供了RemoteObject來作為Flex端的遠端物件(後面稱為RO,不是那個網路遊戲!),就如同我們常用的遠端桌面一樣,RO只是一個輸入和出輸出界面,本身並不作程式執行,運算的部分都是php在負責的,所以會影響到Flex的是RO回傳的結果(在遠端桌面就如同我們看到的畫面),其實是相對安全的(遠端電腦掛了我們電腦也不會有事),有沒有一點VM的味道呢?我們(Flex)只是站在RO旁邊指揮的旁觀者而已

AMFPHP的AMF,全名是Action Message Format,很明顯的就是物件導向,指揮PHP物件應該要如何動作,也就是說一定得要是class才可以被實作執行,一般的PHP敘述在AMFPHP是會造成錯誤的

我們可以從遠端桌面的例子來思考,建立一個遠端桌面需要哪些要素?

最基本的就是電腦IP吧!

在這邊AMFPHP提供了一個Gateway檔案,叫做gateway.php,她是一個程式的出入口,負責幫我們把Flex呼叫的PHP物件找出來

這邊我用了一個簡單的例子來介紹RO,使用上一次我們寫好的Hello物件

import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.mxml.RemoteObject;

public function remoteStart():void
{
    var service:RemoteObject = new RemoteObject(); //建立一個RO物件
    service.addEventListener(ResultEvent.RESULT, resultHandler);  /*執行正確*/
    service.addEventListener(FaultEvent.FAULT, faultHandler);  /*錯誤處理*/
    service.source = “Hello”;  //要實作的php物件
    service.destination = “amfphp”;  //你不會想去改他的
    service.endpoint = “http://localhost/amfphp/gateway.php“;  //gateway.php的位置
    service.say(“aaa”);  //呼叫say function
}
public function resultHandler(evt:ResultEvent):void{
    trace(evt.result);
}
public function faultHandler(evt:FaultEvent):void{
    //處理加載錯誤
    trace(“fault:”+evt.fault);
}

 

執行remoteStart()之後我們可以在debug視窗看到aaa的trace字串顯示,代表我們已經成功執行php物件了

Written by in: web design | 標籤: , , ,

尚無留言 »

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com