[原創]Flex和PHP指令碼的整合(2)–AMFPHP篇

來源:互聯網
上載者:User

本文章最新版本請參見:http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合

在上一篇文章 Flash整合PHP指令碼(1)--XML篇中,我們開發了一個小型的Adobe
Flex2應用程式串連了一個PHP背景程式。如果你曾看過上篇,你可能會問:它們之間是否可以不通過XML編碼作中介,而直接傳遞變數?答案是可以。本文就會示範這方面的執行個體。

請注意,本文是用Flex2編寫的。

一,系統要求:1, Flex Builder 2 (包括SDK)

  • Flex Builder2試用版下載
  • 購買
2, AMFPHP 1.25 :

  • AMFPHP下載
3, PHP (installed on a local web server)


二,預備知識

PHP有關Intermediate知識


三,MYSQL和PHP

如果想要建立一個中大型的公司專屬應用程式,可以使用Adobe Flex Data Service
2。它通過高效的資料轉送,基於資訊的發布和訂閱等更多方式來簡化資料的互動。AMFPHP只是它的一個小子集。如果你為大企業工作,你會更想見識一下它在資料互動層的表現。

完成這個任務的關鍵是
AMFPHP。該項目最早是由Wolfgang
Hamann發起的,該團隊成長壯大到目前的五六個開發人員左右。正是多虧了他們的辛勤工作,整個Flex社區現在才有了一個基於Flex的使用PHP背景前台。

本例將示範如果從一個資料庫中顯示記錄。只是顯示,暫不能插入和更新。本文使用的MYSQL資料庫名Sample,表名Users,和前一篇文章用到的資料庫結構一致,只是需要先往裡面填一些資料以供顯示。AMFPHP_Flex.rar此為資料庫結構和輸入資料的SQL檔案提供下載。

如下為PHP指令碼代碼,其檔案名稱為 sample.php,把它放到AMFPHP的services目錄下。

<?php
// Create new service for PHP Remoting as Class
class sample
{
function sample ()
{
// Define the methodTable for this class in the constructor
$this->methodTable = array(
"getUsers" => array(
"description" => "Return a list of users",
"access" => "remote"
)
);
}

function getUsers () {
$mysql = mysql_connect(localhost, "username", "password");

mysql_select_db( "sample" );

//return a list of all the users
$Query = "SELECT * from users";
$Result = mysql_query( $Query );
while ($row = mysql_fetch_object($Result)) {
$ArrayOfUsers[] = $row;
}
return( $ArrayOfUsers );
}
}
?>

 如果你熟悉AMFPHP的話,上述你也應該很熟悉。

類的名字和檔案名稱要保持一致,如上檔案名稱smaple.php,則類名為sample。因為類檔案總是在載入時調用與其同名的類來初始化自己。上例中定義了對AMFPHP有效方法,就是getUsers,該方法返回一個使用者列表。在資料庫裡,取回所有使用者,並以一個對象數組的方式返回。

四,應用的前台

現在開始建立前台的檔案sample.mxml,它也只有短短五十行:

<!--第一行是最頂層的XML文檔定義-->
<?xml version="1.0"
encoding="utf-8"?>

 <!--第二行是Applicastion定義,並設定了在FLASH載入creationComplete時調用initApplication()函數-->

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" creationComplete="initApplication()">

<!--用於顯示使用者資料的DataGrid組件,請注意列名元素必須和資料庫的欄位名一致。-->
<mx:DataGrid dataProvider="{dataProvider}">
<mx:columns>
<mx:DataGridColumn headerText="Userid" dataField="userid"/>
<mx:DataGridColumn headerText="User Name" dataField="username"/>
<mx:DataGridColumn headerText="User Name" dataField="emailaddress"/>
</mx:columns>
</mx:DataGrid>

<!--然後是一系列AS命令-->
<mx:Script>
<![CDATA[


<!--本例中dataProvider被綁定到<mx:DataGrid>,這意味著該DataGrid從該變數中(此處為PHP對象數組)取得資料。
上,-->

[Bindable]
public var dataProvider:Array;

<!--然後是AMFPHP在FLEX中工作的必須代碼。首先匯入用於遠端
flash.net.Responder包,其實當你聲明你需要一個新的
Responder時FLEX會自動包含入那個包。此處只是特地示範。

<!--然後,建立一個變數,gateway, 它是 RemotingConnection資料類型。你已經知道了RemotingConnection的相關事宜。你應該在FLEX的底部來加入一個檔案,名為RemotingConnection.as,上面有許多代碼。
-->
            import flash.net.Responder;

public var gateway : RemotingConnection;

<!--當FLASH應用載入時調用initApplication ,設定gateway變數為到AMFPHP中的gateway.php的串連路徑。這樣就可以調用sample類中的getUsers方法了。然後根據是否出錯相應地執行onResulth或者onFault兩個函數之一。-->
public function initApplication()
{
gateway = new RemotingConnection( "http://localhost/flex/php/gateway.php" );
gateway.call( "sample.getUsers", new Responder(onResult, onFault));
}

<!--簡單設定了dataProvider變數為結果變數,其通過AMFPHP傳回ActionScript。這就是當你運行MYSQL查詢($ArrayOfUsers)時會返回PHP對象的數組。AMFPHP已經自動把PHP對象數組翻譯成了ActionScript數組,酷吧。 -->
public function onResult( result : Array ) : void
{
dataProvider = result;
}

<!--在出錯情況下,就象給使用者的錯誤資訊提示一樣,你可以追蹤變數的值,在偵錯模式中特別有用-->
public function onFault( fault : String ) : void
{
trace( fault );
}
]]>
</mx:Script>
</mx:Application>

上述執行個體稍顯複雜,讓我們再次明確一下檔案的位置。有三個檔案被建立,以及下載來的AMFPHP檔案包。

  • 把Flex專案檔,sample.mxml 和 RemotingConnection.as放在同一個目錄下
  • 把PHP檔案和檔案夾如services ,actions, adapters, app, browser等從AMFPHP檔案壓縮包中解壓縮釋放出來。
  • 把AMFPHP中的所有檔案都放到web根目錄下
  • 把sample.php放到AMFPHP項目中的services 檔案夾下

那麼,上述串連PHP後台和Flex所建前台的小應用程式執行個體就到此結束了。上述代碼提供在此AMFPHP_Flex.rar打包下載。

 
本文章最新版本請參見:http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.