首頁 > FLEX, PHP, 程式設計, 網頁設計 > FLEX on PHP , ZendAMF 設定讓 CLASS 更方便

FLEX on PHP , ZendAMF 設定讓 CLASS 更方便

2009年3月19日  瀏覽次數 : 4,514

最近看看 WordPress 後台的訪客資料,發現開始在尋找 ZENDAMF 的訪客也開始增加了,跟 AMFPHP 可以說是一半一半,不過之前有朋友跟我提到說,AMFPHP 只要將所有的 CLASS 放在 SERVICES 的資料夾內,FLEX 只要加上資料夾名稱就可以讀取到了,上次我的設定方式還要一個一個引用 CLASS 還要 INCLUDE CLASS ,這樣好麻煩喔,其實也有方法可以一次把所有的 PHP CLASS 都放到 ZENDAMF 內的。

image 圖片 : 一次讀取三隻不同的 PHP CLASS 內的資料

當然,前幾篇我們所說過的範例,你一定要先可以執行起來,細節方面我就不多說了,請參閱以下文章複習一下。

今天我們要來改的就是 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…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir FLEX, PHP, 程式設計, 網頁設計 , , , , , ,

  1. 2009年3月19日20:02 | #1

    這樣子以後我們只要把 PHP CLASS 放在 SERVICES 的資料夾內
    就可以隨時的取用任何一隻 PHP CLASS 喔

    很方便吧

    就像 AMFPHP 一樣了~

  2. siao
    2009年12月18日11:34 | #2

    @Ausir
    我改成這樣反而remote不到~
    我用debug去看endpoint
    為什麼都是null呢@@

  3. siao
    2009年12月18日11:45 | #3

    @siao
    endpoint有值了~反而是lastresult為空值,導致前端產生錯誤!><

  4. siao
    2009年12月18日15:42 | #4

    原來php檔名要跟class name一樣XD…終於搞定~!

  5. fid
    2010年3月15日12:33 | #5

    @siao

    而且文件名大小写都必须和Class Name一致,否则依然找不到文件

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。