FLEX on PHP , ZendAMF 設定讓 CLASS 更方便
最近看看 WordPress 後台的訪客資料,發現開始在尋找 ZENDAMF 的訪客也開始增加了,跟 AMFPHP 可以說是一半一半,不過之前有朋友跟我提到說,AMFPHP 只要將所有的 CLASS 放在 SERVICES 的資料夾內,FLEX 只要加上資料夾名稱就可以讀取到了,上次我的設定方式還要一個一個引用 CLASS 還要 INCLUDE CLASS ,這樣好麻煩喔,其實也有方法可以一次把所有的 PHP CLASS 都放到 ZENDAMF 內的。
當然,前幾篇我們所說過的範例,你一定要先可以執行起來,細節方面我就不多說了,請參閱以下文章複習一下。
- FLEX on PHP , 使用 ZendAMF remoteObject
- FLEX on PHP , ZendAMF 中文 UTF-8 測試報告
- FLEX on PHP , ZendAMF with ZendDB (XAMPP的逆襲)
今天我們要來改的就是 gateway.php 這隻程式。之前我們的寫法是……
gateway.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php //Basic Config error_reporting(E_ALL | E_STRICT); //設定Error Report的等級 date_default_timezone_set('Asia/Taipei'); //設定時區為台北 //Include path //比較需要注意的是這邊新增了一個 library 的 PATH 路徑,用來供 ZFAMF 的資料互相存取 define ('P_S', PATH_SEPARATOR); set_include_path('.' .P_S .'library' .P_S .'../application/models/' .P_S .get_include_path()); //載入 ZFAMF 類別檔 require_once 'library/Zend/Amf/Server.php'; //載入我們的 HELLOW 類別檔 require_once 'hellow.php'; //建立 ZENDAMF SERVER $server = new Zend_Amf_Server(); //著名我們這裡面有一個 CLASS 叫做 HELLOW $server->setClass("hellow"); //$server -> handle() //執行結果 echo( $server -> handle() ); ?> |
這個方法不是不好,僅把需要用到的 CLASS 引入 PHP 中,然後加入 AMF SERVER ,但是一堆 CLASS 的時候總是有點煩人,即使效能好似乎也不討喜,所以我們改成以下寫法…
allgateway.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php //定義 library 位置 define ('P_S', PATH_SEPARATOR); set_include_path('.' .P_S .'library' .P_S .'../application/models/' .P_S .get_include_path()); //引入 AMF SERVER 類別 require_once 'library/Zend/Amf/Server.php'; $server = new Zend_Amf_Server(); //將整個資料夾都納入 SERVER 內 $server->addDirectory(dirname(__FILE__).'/services/'); $result = $server->handle(); echo $result; ?> |
這個寫法就可以把我們所設定的 SERVICES 資料夾內的所有 PHP CLASS 通通一次納入,這樣我們就不用每次新增完 CLASS 就得回來 GATEWAY 設定了。
接下來我們簡單的新增三隻 PHP CLASS,其中一隻我們還多用了一個資料夾 COMP 把它包起來看是不是連資料夾內的 PHP CLASS 都可以抓到。
services\sayGoodMorning.php
1 2 3 4 5 6 7 8 9 | <?php class sayGoodMorning { function say(){ return "Good Morning :: corAusir :: 程式逗設計"; } } ?> |
services\sayGoodNight.php
1 2 3 4 5 6 7 8 9 | <?php class sayGoodNight { function say(){ return "Good night :: corAusir :: 程式逗設計"; } } ?> |
services\comp\sayGoodBye.php
1 2 3 4 5 6 7 8 9 | <?php class sayGoodBye { function say(){ return "bye bye all Fans"; } } ?> |
最後我們打開 FLEX 來寫我們的 FLEX 測試程式,我們建立了三個 RemoteObject 就像我們在寫 AMFPHP 一樣,分成三個不同的類別,不過因為我之前的 gateway 寫死在 service-config.xml 內了,因此我不改 XML 檔案,我直接多寫了一個 endpoint 屬性,指向我們新的 gateway , allgateway.php ,其他寫法都相同了,程式執行的時候直接呼叫三個不同類別內的方法。
ZendAMF2class.mxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="26" creationComplete="init()">
<mx:Script>
<![CDATA[
private function init():void{
this.ro1.say();
this.ro2.say();
this.ro3.say();
}
]]>
</mx:Script>
<mx:Label text="{ro1.say.lastResult}"/>
<mx:Label text="{ro2.say.lastResult}"/>
<mx:Label text="{ro3.say.lastResult}"/>
<mx:RemoteObject id="ro1" endpoint="allgateway.php" destination="zend" source="sayGoodMorning"/>
<mx:RemoteObject id="ro2" endpoint="allgateway.php" destination="zend" source="sayGoodNight"/>
<mx:RemoteObject id="ro3" endpoint="allgateway.php" destination="zend" source="comp.sayGoodBye"/>
</mx:Application> |
今天課題很簡單,趕快試試看吧。
Random Posts
Loading…
相關文章 :










這樣子以後我們只要把 PHP CLASS 放在 SERVICES 的資料夾內
就可以隨時的取用任何一隻 PHP CLASS 喔
很方便吧
就像 AMFPHP 一樣了~
@Ausir
我改成這樣反而remote不到~
我用debug去看endpoint
為什麼都是null呢@@
@siao
endpoint有值了~反而是lastresult為空值,導致前端產生錯誤!><
原來php檔名要跟class name一樣XD…終於搞定~!
@siao
而且文件名大小写都必须和Class Name一致,否则依然找不到文件