服务分类
联系我们

长沙市华融劳务派遣有限公司 
电话:0731-88084518
传真:0731-88084518
手机:15111173115
联系人:陈先生
邮编:410200
网址:http://www.llsj138.com
地址:长沙市望城县高塘岭镇郭亮南路49号

 

博盈亚洲
博盈亚洲_博盈亚洲平台_博盈亚洲官网
作者:admin  来源:未知 阅读: 次 时间:2017-01-13 11:18 字体:[  复制 打印 网址

该电子邮件包含一个以下格式的链接:

您的应用程序应该已部署到Bluemix。但是您的工作尚未完成!

NameVirtualHost127.0.0.1VirtualHost127.0.0.1DocumentRoot/var/

!DOCTYPEhtmlhtmlheadmetaname=viewportcontent=width=device-width,initial-scale=1linkrel=stylesheethref=

完成该应用程序的先决条件

可以从JazzHub存储库下载本文中实现的所有代码,以及本文中使用的PHP构件包的配置文件。推荐您获取该代码,使用它,并尝试添加一些新特性。我您不会造成任何,而且它肯定会对您的学习有所帮助。

/login处理函数:参照应用程序数据库来验证用户的凭据。如果它们是匹配的,则会创建一个会话变量,使用用户的惟一标识符作为$_SESSION[uid]。然后,/record和/report处理函数会使用此会话变量将卡里计数链接到数据库中的用户。

此过程首先配置本地应用程序数据库的凭据。然后在PHP中检查特殊的VCAP_SERVICES变量。在Bluemix上,此变量拥有绑定的服务实例的凭据。如果找到此变量,该脚本会假设它在Bluemix上运行,使用这些凭据来初始化一个与绑定的MySQL实例的PDO连接。如果未找到此变量,该脚本会假设它在一个本地开发实例上运行,并使用本地数据库的凭据。

现在完成完成了对该应用程序的编码,最后一步是部署它。如果您在本地进行部署,那么现在您已经完成部署了,可以正常使用该应用程序了。但是,如果在Bluemix上进行部署,您需要一个Bluemix帐户,还需要下载并安装CloudFoundry命令行客户端。使用以下步骤完成部署过程。

在服务器端,需要一个处理函数来处理对/search端点的Ajax请求,这时就需要使用Slim。Slim使用Ajax请求数据连接到NutritionixAPI并运行一次搜索,类似于之前显示的搜索。下面这个代码清单给出了实现此功能的代码。

第6步.显示报告

正如本文所述,Bluemix为创建移动友好的应用程序并将它部署在基于云的平台上提供了的基础。再结合使用Slim、jQueryMobile和AngularJS,您将拥有快速设计原型并部署可扩展的、复杂的、交互式的应用程序所需的所有工具。

在客户端,我使用jQueryMobile为该应用程序创建了一个移动友好的用户界面,并使用AngularJS来启用该应用程序的一些交互式特性。在服务器上,我使用Slim(一个PHP微型框架)来控制与NutritionixAPI的交互,并在MySQL服务器中保存和检索数据。

可使用第1步中所示的示例模式来初始化应用程序数据库。但不能直接在Bluemix中运行第1步中的SQL命令,该应用程序包含一个名为/install-schema的特殊由,您可以通过您的浏览器请求使用该由,用它来设置数据库表和示例数据。尽管本文没有给出此由,但您可以在应用程序的源代码存储库中找到它。

应用程序清单文件将会告诉Bluemix如何部署应用程序。具体地讲,它指定要使用的PHP运行时(构件包)。在$APP_ROOT/manifest.yml上创建此文件,在其中填入以下信息。

第8步.部署到IBMBluemix

authenticate()函数:检查用户标识符是否存在于会话中。如果不存在,那么该函数会将用户重定向到/loginURL,强制用户重新登录。此函数可用作Slim中间件,在处理一个请求之前运行。通过将此中间件添加到特定的由处理函数中,可应用程序的功能,仅让经过验证的用户访问应用程序。在应用程序的源代码中,可以看到在/search、/record和/report处理函数上使用了此中间件。

!DOCTYPEhtmlheadscriptvarmyApp=angular.module(myApp,[]);functionmyAppController($scope,$http){//relatedtoreportfunctionality$scope.report=function(){$http({method:GET,url:/report}).success(function(data){$scope.counts=data;});};}/script/headbody...divdata-role=contentng-app=myAppdivdata-role=tabsng-controller=myAppControllerdivdata-role=navbarulliahref=#searchdata-theme=aclass=ui-btn-activeSearch/a/liliahref=#recorddata-theme=aRecordspanclass=ui-li-count{{getTotalCalories()}}/{{mealItems.length}}/span/a/liliahref=#reportdata-theme=ang-click=report()Report/a/li/ul/divdivid=reporth2class=ui-barui-bar-aSummary/h2divclass=ui-bodyuldata-role=listviewdata-inset=truedata-split-theme=dliTodayspanclass=ui-li-count{{counts.c1}}/span/liliLast7daysspanclass=ui-li-count{{counts.c7}}/span/liliLast30daysspanclass=ui-li-count{{counts.c30}}/span/li/ul/divdivclass=ui-bodybuttonng-click=report()Refresh/button/div/div/div/div/body/html

要使该应用程序更容易访问,还可以在开发中定义一个新虚拟主机,并将它的文档根指向$APP_ROOT。推荐执行这一步(但是可选的),因为这会为Bluemix上的目标部署创建一个很接近的副本。

{require:{slim/slim:2.*,sendgrid/sendgrid:2.0.5}}

第4步.启用搜索界面

该代码清单设置了一个列表视图,其中包含3个绑定到范围变量的占位符,这些范围变量表示今天、最近七天和最近30天的卡里总量。report()函数负责设置这些范围变量,对/report端点执行Ajax调用并解析JSON响应。

?php//useComposerautoloaderrequirevendor/autoload.php;\Slim\Slim::registerAutoloader();//configureSlimapplicationinstance$app=new\Slim\Slim();$app-config(array(debug=true,templates.path=./templates));//configurecredentials//...forNutritionix$config[nutritionix][appId]=APP-ID;$config[nutritionix][appKey]=APP-KEY;//indexpagehandlers$app-get(/,function()use($app){$app-redirect(/index);});$app-get(/index,function()use($app){$app-render(main.php);});//searchhandler$app-get(/search/:query,function($query)use($app,$config){try{//executesearchonNutritionixAPI//specifysearchscopeandrequiredresponsefields//replacewithyourAPIcredentials$qs=http_build_query(array(appId=$config[nutritionix][appId],appKey=$config[nutritionix][appKey],item_type=3,fields=item_name,brand_name,nf_calories));$url=

Bluemix提供了SendGrid服务来完成此操作,第8步会介绍将它绑定到您的应用程序实例的过程。目前,您只需要知道SendGrid包含一个PHP客户端库,您可以在自己的应用程序中使用该库连接到绑定的SendGrid服务,执行身份验证和发送电子邮件。第2步中已使用Composer下载了这个库,现在您可以使用它了。该服务的身份验证凭据已从该清单顶部的BluemixVCAP_SERVICES变量中获取,与MySQL一样。

1.创建应用程序清单文件

完成应用程序部署后,可浏览到您在应用程序清单文件中指定的主机(例如)来开始使用它。或者使用本文开头的运行应用程序链接来试验该应用程序的实时演示。

结束语

下载并设置Slim微型框架。为什么选择Slim?Slim包含一个复杂的URL由器,而且支持Flash消息、加密cookie和中间件。它也容易理解和使用,而且具有优秀的文档。

下一步是向用户发送一封确认电子邮件,要求用户单击某个链接来验证并激活该帐户。在Bluemix上,这一步说起来容易做起来难。如果在本地开发,或者在您拥有管理的系统上进行开发,那么很容易配置一个邮件服务器来处理传出的电子邮件流量,然后,可以使用PHPmail()函数发出确认电子邮件。但在Bluemix上运行应用程序时,这一步的完成方式完全不同。您需要配置一个电子邮件服务,将它绑定到您的应用程序,然后使用该服务发出电子邮件。

您的应用程序现在已经完成部署,但仍然需要将它连接到一个MySQL数据库实例,以便您的API拥有要处理的数据。转到Bluemix管理仪表板,使用您的IBM用户名和密码进行登录。您会看到Apps菜单栏中列出了您的应用程序。

请仔细看看这个搜索界面。请注意,每个搜索结果旁边都有一个按钮,该按钮链接到addToMeal()函数。单击此按钮时,相应的食物会添加到该范围内的一个mealItems数组中。稍后,系统会使用这个数组构建record选项卡的视图。

它的工作原理是什么?用户输入一个搜索词汇并单击Search时,AngularJSsearch()函数会通过foodItems模型检索输入,并向/search应用程序端点生成一个Ajax请求。此请求不是NutritionixAPI端点,而是一个由应用程序本身管理的中间API端点(稍后将会详细介绍)。

如该图所示,NutritionixAPI使用一个JSON文档响应该请求,该文档列出了与搜索词汇“chicken”匹配的食物。查询字符串包含item_type=3参数,该参数将搜索范围到USDA数据库。对于每种食物,响应包含食物名称、品牌名称和卡里计数。也支持其他字段;请查阅NutritionixAPI文档了解有关的详细信息。

开发一个简单的搜索界面,让用户能够搜索食物并查看结果列表。结果页必须包含一些控件,用户可以使用这些控件将所选的食物添加到其用餐记录中。

最后一部分将会介绍如何将应用程序部署到Bluemix云,该云提供了一种用于应用程序部署的、可扩展、健全的基础架构,可确保用户拥有全天候的访问能力。

5.安装示例模式

/report端点是本小节的真正主角。它运行3个SQL查询来计算3个时段内的用户卡里消耗总量。这些计数会随后传递到一个JSON文档,而后者通过Ajax返回给该应用程序。完成这些任务的代码如下所示。

通过迭代第4步中的mealItems数组来生成选定食物列表非常容易。在用户选择搜索界面中的新食物时,AngularJS数据绑定机制可确保该列表会即时更新。

本文将介绍如何创建一个在线卡里计数器,它使得用户能够:

要在Apache中为该应用程序设置一个命名虚拟主机,可以打开Apache配置文件(httpd.conf或httpd-vhosts.conf)并添加以下代码:

接下来,该清单为/record由定义了一个POST回调处理函数。此处理函数收到包含卡里总量的AjaxPOST请求,并创建SQLINSERT语句来将这些计数保存到数据库中。除了卡里计数之外,该处理函数还会在语句中自动添加时间戳、客户端的IP地址和登录用户的惟一标识符。如果INSERT成功完成,该处理函数会向请求的Ajax脚本返回一个包含记录标识符的JSON包。

---applications:-name:calorie-counter-[random-number]memory:256Minstances:1host:calorie-counter-[random-number]buildpack:

上一个清单中的/register处理函数在收到GET请求时会呈现用户注册表。检测到一次POST提交时,它会执行一些基本检查来验证电子邮件地址格式、密码和电子邮件地址的惟一性。然后,它为帐户确认电子邮件创建一段惟一代码,将帐户细节、源IP地址、时间戳和电子邮件确认代码一起保存在应用程序数据库中。帐户状态被设置为不活动(0)。

用户界面的第3个选项卡显示了用户卡里消耗情况报告。为了简便起见,这些报告已经预先设置,以便显示今天、最近七天和最近30天的卡里计数。提高此选项卡的复杂性很简单,这样就允许使用自定义的日期范围或更详细的分解。

第2步.安装Slim

Ajax请求的响应是一个JSON包,与之前显示的内容类似。这段响被附加到foodItems.results属性中,AngularJS数据绑定负责迭代此集合,解析它,并将它显示为一个搜索结果列表。

听起来是否很有趣?让我们开始吧!

它使用SlimPHP微型框架与NutritionixAPI通信来执行信息检索,使用jQueryMobile来建立用户界面,还使用了PHPCloudFoundry构建块和SendGrid服务实例。IBM®Bluemix是一款beta级产品,随着我们不断让其功能更加完善和更易于使用,它也将不断改进。我们会竭尽全力保持本文最新,但并不总是完全跟得上现状。感谢大家的理解!直到几年前,要计算您刚吃的三明治中含有多少卡里,还需要依靠猜测和查看包装。如今,同样的信息可从许多在线营养数据库中获取,这使得食物摄入量变得更容易。

完成用餐记录后,用户单击Save将该记录保存到数据库中。record()函数创建了一个对/record端点的AjaxPOST请求,将它传递给用餐记录的卡里总量中。如果该Ajax请求被成功处理,那么mealItems数组将会被清除,准备存储下一次用餐的记录。

用户可单击每个食物旁边的按钮,从用餐记录中删除选定的食物。此操作会调用removeFromMeal()控制器方法,该方法使用所选食物的索引来从mealItems数组中删除它。数据绑定负责更新食物和栏计数器。

栏包含两个计数器:所选食物的卡里总量和食物总数。当用户在用餐记录中添加和删除食物时,该计数会自动更新。此更新同样是使用数据绑定来完成的。这两个值可在mealItems数组长度和getTotalCalories()控制器方法中进行动态更新。

您可能想知道用户标识符来自何处。这将在第7步中详细介绍,但简单地讲,每个应用程序用户都有一个在注册时生成的惟一标识符。用户登录时,此标识符会被添加到$_SESSION[uid]变量中的会话中,并在您保存和检索特定于用户的信息时插入到各种SQL语句中。

奢侈此用户界面的基本结构并将其保存为$APP_ROOT/templates/main.php。

请注意,我在前面的清单中使用了Slim的flash()方法。此方法是一种向用户显示消息的便捷方式,因为该消息存储在会话中,而且一直保存到收到下一条请求为止。您可以看到,注册表和登录表都包含此消息的占位符。

?php//useComposerautoloaderrequirevendor/autoload.php;\Slim\Slim::registerAutoloader();//snip:configurecredentials//snip:initializePDOobject//snip:startsession//configureSlimapplicationinstance$app=new\Slim\Slim();$app-config(array(debug=true,templates.path=./templates));//reporthandler$app-get(/report,function()use($app,$dbh){$counts=array();$counts[c1]=$counts[c7]=$counts[c30]=0;try{//getcaloriecounts//...fortoday$stmt=$dbh-query(SELECTIFNULL(SUM(calories),0)ASsumFROMmealsWHEREuid=.$_SESSION[uid].andDATE(rdate)=DATE(NOW()));$row=$stmt-fetch(PDO::FETCH_ASSOC);$counts[c1]=$row[sum];//...forthelast7days$stmt=$dbh-query(SELECTIFNULL(SUM(calories),0)ASsumFROMmealsWHEREuid=.$_SESSION[uid].andDATE(rdate)BETWEENDATE(DATE_SUB(NOW(),INTERVAL7DAY))ANDDATE(NOW()));$row=$stmt-fetch(PDO::FETCH_ASSOC);$counts[c7]=$row[sum];//...forthelast30days$stmt=$dbh-query(SELECTIFNULL(SUM(calories),0)ASsumFROMmealsWHEREuid=.$_SESSION[uid].andDATE(rdate)BETWEENDATE(DATE_SUB(NOW(),INTERVAL30DAY))ANDDATE(NOW()));$row=$stmt-fetch(PDO::FETCH_ASSOC);$counts[c30]=$row[sum];//returnJSON-encodedresponsebody$app-response()-header(Content-Type,application/json);echojson_encode($counts);}catch(Exception$e){$app-response()-status(400);$app-response()-header(X-Status-Reason,$e-getMessage());}});//snip:otherhandlers$app-run();

6.开始使用您的应用程序

4.将MySQL和SendGrid服务绑定到应用程序

下面这个代码清单显示了报告界面的代码:

在上一个清单中,请注意另外两点:

我使用Composer(PHP依赖项管理器)下载和设置Slim。除了Slim之外,我还添加了针对PHP的SendGrid客户端库。(进一步了解SendGrid和为什么需要它。)下面这个代码清单是Composer配置文件。将此文件保存到$APP_ROOT/composer.json(其中$APP_ROOT指您的工作目录)。

版权所有:长沙市博盈亚洲劳务派遣有限公司 联系人:陈先生  电话:15111173115 传真:0731-88084518 
邮政编码:410200  地址:长沙市望城县高塘岭镇郭亮南路49号。 备案许可证编号为:湘ICP备11001510号