利用Flash Builder for PHP简化Flex和PHP开发(二)
创建PHP服务 为了简化,你可以使用一个基本的PHP类,它具有硬编码的数据。利用这一方法,你可以在你的代码中复制和粘贴该类,现在你可以开始编程。当然,在真正的应用程序中,通常你具有各种连接到数据库的PHP类。在使用?MySQL和?PHP的情形下,使用服务的步骤和原则保持相同。 下面是?AuthorsService.php?类的代码: <?php class?AuthorsService?{ ???? ????public?function?getData()?{ ????????//in?a?real?world?application?you?would?use?a?database? ????????//and?return?the?result?set?for?example ????????$ret?=?array(); ????????$ret[]?=?array('id'=>1,?'firstname'?=>?'Dantes',?'lastname'?=>?'Aligherie'); ????????$ret[]?=?array('id'=>2,?'firstname'?=>?'Niccolo',?'lastname'?=>?'Machiavelli'); ????????$ret[]?=?array('id'=>3,?'firstname'?=>?'William',?'lastname'?=>?'Shakespeare'); ????????$ret[]?=?array('id'=>4,?'firstname'?=>?'Kevin',?'lastname'?=>?'Hoyt'); ????????$ret[]?=?array('id'=>5,?'firstname'?=>?'Paul',?'lastname'?=>?'Trani'); ????????$ret[]?=?array('id'=>6,?'firstname'?=>?'Renaun',?'lastname'?=>?'Erickson'); ????????$ret[]?=?array('id'=>7,?'firstname'?=>?'Ryan',?'lastname'?=>?'Stewart'); ????????$ret[]?=?array('id'=>8,?'firstname'?=>?'Mark',?'lastname'?=>?'Doherty'); ????????$ret[]?=?array('id'=>9,?'firstname'?=>?'Mihai',?'lastname'?=>?'Corlan'); ????????$ret[]?=?array('id'=>10,?'firstname'?=>?'Terry',?'lastname'?=>?'Ryan'); ????????return?$ret; ????} ????//update?the?entry? ????public?function?updateData($author)?{ ????????return?$author; ????} ???? ????//add?a?new?entry ????public?function?addData($author)?{ ????????return?$author; ????} ???? ????//delete?the?entry ????public?function?deleteData($author)?{ ????????return?$author; ????} ???? } ?> 该PHP服务能够实现读取(Read?)操作。当然,在真正的应用程序中,你还需要实现其它CRUD?操作(创建/更新/删除Create/Update/Delete)?。 按照下列步骤建立PHP服务: 1.?在PHP-project/src/?文件夹中,创建一个名称为?AuthorsService.php?的新文件(参见图11)。 2.?打开该文件并且将上面代码复制到该文件中。 3. 保存该文件 图? 11. AuthorsService.php 文件
在Flash?Builder 1.?返回编辑器中的?Main.mxml?文件,并且点击在Data/Services视图中的Connect?to?Data/Service?链接(参见图12)。(如果你看不见该视图,则选择Window?>?Show?View,然后选中Data/Services)。 注:?你也可以通过右击PHP服务文件并且选中Create?PHP?Service?For?Flex,启动该服务向导。 图?12.Data/Services?视图? Flash?Builder?for?PHP?能够帮助你内视一个?PHP?服务,并且生成一个包围该服务的?Flex?包装页面,这样你可以在相应的Flex?代码中使用它。 图?13.Flash?Builder?Service向导? 图?14.选中AuthorsService.php文件? 该服务名称和包将被自动填入(参见图15)。你可以随意对它们进行更改。 4.点击Finish按钮。 图?15.自动设置Service的详细信息(名称和包) Flash?Builder?for?PHP?可以在Flex项目中创建服务?wrapper?类并且在Data/Services?视图中显示其方法(参见图16)。 图?16.AuthorsService?ActionScript的服务包装页面? 配置返回类型 AuthorsService?PHP?类的getData()?方法能够返回关联数组的一个数组。但现在?ActionScript包装页面返回的是匿名Object的一个数组。下一步是定义返回数据的一个自定义类型。为什么你应该小心对待这一步??因为当使用Remoting技术时这是一个最佳方法的问题。当你为你的服务定义自定义类型时,Flash?Builder?能够帮助你完成代码编写以及编译时间错误检查。例如,在实际的应用程序中,deleteData()方法需要一个类型?VOAutho的参数。如果你传递一些其它对象,则编译器将指示该错误。 注:如果你的?PHP?服务使用类型错误(即如果你具有定义的?PHP实体和服务方法,则返回强类型数据而不是返回匿名对象),则你不需要使用下列步骤配置返回类型。否则,当你导入PHP服务时,你需要定义返回类型。 1.?在?Data/Services?视图中,?右击getData()?方法,然后选中?Configure?Return?Type。 2.?当被提示如何配置返回类型时,选中Auto-detect?The?Return?Type?From?Sample?Data,然后点击Next(参见图17)。 图?17.选中auto-detect? 在下一屏幕中,你提供?这一自定义类型的名称(例如输入VOAuthor),然后检查属性类型。在本例中,PHP类返回关联数组的一个数组,每个数组带有三个键(id、lastname和firstname),而Flash?Builder?for?PHP?能够自动检测出它们(参见图18)。 3.?点击Finish按钮。 图?18.配置返回类型? 在实际的应用程序中,你还需要使用相同类型进行删除、更新和插入操作(参见图19)。对于这些操作,你需要通过选中现有数据类型VOAuthor来定义输入和返回类型。 图?19.配置使用数据的自定义类型VOAuthor的AuthorsService?Flex?包装页面? 使用服务 下面,我将向你介绍如何使用该包装页面的getData()方法及利用方法返回的数据填写一个数据网格。 1.?切换到Main.mxml?文件的Design?视图。 2.?从Components视图(在左下方)将?Data?Grid?组件拖拽到设计区域(参见图20)。 图?20.将一个数据网格添加到Flex?应用程序中? 4.?当被提示是否希望利用与新服务操作的绑定替换该绑定时,点击?OK。 5.?在?Bind?To?Data?对话框中,核查你希望用作数据源的服务名称和操作(参见图21),然后点击OK。 图?21.确认操作和服务名称 6.保存该文件(选中?File?>?Save)。 如需运行应用程序,切回到Source?视图,右击编辑器中的文件,然后选中Run?As?>?Web?(PHP)?Application(参见图22)。 图?22.运行Flex应用程序? 这将启动Flex应用程序,它可以使用你创建项目时设立的配置(root?URL和端口地址)。Flex?应用程序能够显示来自数据网格组件的PHP服务的数据(参见图23)。 图?23.在浏览器中运行Flex应用程序 为了更深入地了解如何使用Flex服务包装页面以及相应的操作是如何与数据网格进行绑定的,请花一点时间研究一下通过将getData()拖拽到数据网格生成的代码。 调试Flex和PHP代码? 在Flash?Builder?for?PHP问世之前,同时调试?Flex和?PHP?代码是件相当复杂的任务。现在,也不是非常简单。 为什么说拥有一个良好的调试工作流程非常重要??因为对任何丰富的客户端(Flex或Ajax)来说,导致你的应用程序出现故障的原因可能来自服务器侧代码、客户端侧代码或网络。当你能够以端到端的方式调试代码时-从客户端侧进行调用到执行服务器侧代码,然后再返回到在客户端侧接收结果-最后你可以更有效地确定问题的根源。 按照下列步骤调试你的Flex?PHP项目: 1.?在Flex和?PHP文件中你希望调试程序暂停的位置设置断点。例如,在?Main.mxml文件中的?dataGrid_creationCompleteHandler()?函数的位置设置一个断点(大约在第14行)并且在?AuthorsService.php?文件中的?getData()?方法的位置设置一个断点?(第7行)。(右击编辑器左边的行号并且选中Toggle?Breakpoint,即可设置一个断点。)? 2.?右击Main.mxml?文件并且选中?Debug?As?>?Web?(PHP)?Application?以便自动为这些项目建立一个调试配置,然后以调试模式启动项目。 加载该项目并且执行该Flex代码至?dataGrid_creationCompleteHandler()?方法被调用的位置。当你第一次到达断点时,你将被提示确认相应的透视开关。 3.?选中Remember?My?Decision?并且点击?Yes?(参见图24)。 相应的Debug透视图将显示出来(而不是你目前正在使用的?Flex透视图)。这一透视图同时显示了Flex和?PHP调试器信息。 图?24.确认切换至?Debug?透视图? 在?Flex调试器中,你可以内视变量和应用程序状态,检查堆栈跟踪以及逐行继续你使用Flex调试器习惯进行的任何操作(参见图25)。 图?25.运行状态的Flex?调试器 4.?选中Run?>?Resume?继续运行。 Flex?应用程序将调用PHP-project?项目中的?gateway.php?文件,?该项目能够在AuthorsService.php中执行getData()?方法。当应用程序运行到你的第二个断点(在?PHP?侧的断点)时,PHP?调试器将被调用。 5.?如果显示的对话框要求你输入各种?Zend?Framework?源文件的位置(参见图26),选中底部的选项并且点击OK。 图?26.定义Zend?Framework?文件的源路径? 在处理客户端侧的代码时,你可以内视变量并且逐行继续运行应用程序(参见图27)。 在你处理完PHP调试器之后,按下F8或点击Resume按钮以便恢复正常执行状态。 图?27.运行状态的PHP调试器? 下一步阅读方向 本文给出了如何使用Flash?Builder?for?PHP?简化?Flex和?PHP?开发过程的简介。如需了解关于Flex和?PHP?开发过程的信息,我建议你访问我的?博客?和Adobe?Developer?Connection?网页? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |