惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
Cloudbric
Cloudbric
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
宝玉的分享
宝玉的分享
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
博客园_首页
The Cloudflare Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
IT之家
IT之家
Cyberwarzone
Cyberwarzone
罗磊的独立博客
美团技术团队
V
V2EX
Project Zero
Project Zero
A
Arctic Wolf
C
Cyber Attacks, Cyber Crime and Cyber Security
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
S
Schneier on Security
P
Privacy International News Feed
V
Visual Studio Blog
量子位
T
Tor Project blog
S
Securelist
腾讯CDC
A
About on SuperTechFans
T
Threat Research - Cisco Blogs
G
GRAHAM CLULEY
B
Blog RSS Feed
D
DataBreaches.Net
博客园 - 三生石上(FineUI控件)
B
Blog
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
L
LINUX DO - 热门话题
Recorded Future
Recorded Future

博客园 - 深瞳

懒惰化、标准化、自动化——工具化--利用合适的工具构建流水线软件过程 脚本语言的游戏开发 准妈妈必听的十首乐曲完全版 [原创]Flex和PHP脚本的整合(1)--XML篇 夜如深瞳,瞳深如夜 新一波VB.NET升级需求涌现 使用VS2005的WEB部署工程 VS2005web应用程序项目教程(7)Upgrading VS 2003 Web Projects to be VS 2005 Web Application Projects VS2005web应用程序项目教程(6)Creating and Using User Control Libraries VS2005web应用程序项目教程(5)Using Master Pages and Site Navigation VS2005web应用程序项目教程(4)Data Binding against Objects VS2005web应用程序项目教程(3)Building Pages with VS 2005 Web Application Projects VS2005web应用程序项目教程(2)Code-Behind with VS 2005 Web Application Projects VS2005web应用程序项目教程(1)Building Your First Web Application Project 在.net开发中几个重要的认识误区 CSVS 和CSSDK 的区别 ASP.net(1.1)原理学习笔记--第十一章 安全性Security ASP.net(1.1)原理学习笔记--第十章 状态管理State Management ASP.net(1.1)原理学习笔记--第九章 缓存Caching
[原创]Flex和PHP脚本的整合(2)--AMFPHP篇
深瞳 · 2006-08-04 · via 博客园 - 深瞳

本文章最新版本请参见:http://www.deepcast.net/wiki/ow.asp?Flash和PHP的整合

在上一篇文章 Flash整合PHP脚本(1)--XML中,我们开发了一个小型的Adobe Flex2应用程序连接了一个PHP后台程序。如果你曾看过上篇,你可能会问:它们之间是否可以不通过XML编码作中介,而直接传递变量?答案是可以。本文就会演示这方面的实例。

请注意,本文是用Flex2编写的。

一,系统要求:

1, Flex Builder 2 (包括SDK)

2, AMFPHP 1.25 :

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的整合