在上一篇文章中我们完成了练习项目某航空公司订票应用的航班数据的虚拟测试记录的数据填充操作,本文将以所填充的航班记录信息为基础进一步实现航班查询业务功能开发。本例查询功能主要使用Laravel提供的查询构建器进行查询。
需求描述
项目主要需求包括:
- 使用搜索功能时无需登录;
- 出发城市和目的地必须填写且不能相等。如果输入不正确,请提供错误提示;
- 搜索后,航班信息(航班号,飞机型号,出发时间,出发城市和目的地)将正确,完整地显示在搜索结果页面中;
- 如果搜索中没有可用的航班,请提供适当的提示;
- 搜索日期不允许为空,如果输入不正确,请给出适当提示;
解决措施及实施步骤
该需求描述较为简单,主要结合前端表单进行表单的提交及处理操作。需要注意问题是对用户填写及提交信息进行检查。如出发地与目的地不允许相同,时间必须填写等。本例主要解决措施及操作实施步骤描述如下:
1、定义表单处理路由
表单处理路由主要是将用户点击表单处理操作分配到指定的控制器进行处理。本例表单处理action定义成search,控制器定义为SearchController,处理方法为search。其中表单部分结构截图如下:
路由需要在web.php中进行设置,按照所定义的action处理方法及SearchController控制器可以在web.php中定义如下路由:
Route::post('search', 'SearchController@search');
2、定义控制器与模板填充实现
与之对应的是控制器php文件的编写,在完成路由编写之后,创建SearchController.php文件实现控制器的编写,该控制器主要用于实现航班信息查询业务逻辑的抽象、封装与实现。SearchController文件类定义描述如下:
该控制器编写是业务功能实现的关键,首先通过$data变量获取了前端提交的航班查询信息,并从其中读取出对应指端,根据字段获取的值对出发地、目的地相同进行处理、对日期不填写情况进行处理等。主要处理代码说明如下:
if($flag==1 || $dflag==1){//flag==1表示出发地与目的地相同 dflag==1表示日期未选择 return view('search',['uuflag'=>$flag,'uutime'=>$dflag]);//传递变量给view,在view中做出判断}
view视图在获取传递标识之后可做出对应判断与处理,并采用标记给出提示信息,view视图主要是指search模板,处理提示代码如下:
当前端传递数据没有问题之后可以进一步调用查询构建器实现对flights航班信息表的条件查询。并根据查询结果记录集条数向模板返回不同参数,如果查询结果为空则没有必要返回记录集。构建器实现查询代码如下:
$res=DB::table('flights')->where('flight_from','=',$ffm)->where('flight_to','=',$fto)-> where('flight_date','=',$ftime)->get()->toArray();if(count($res)>0){ return view('search',['rflag'=>1,'res'=>$res,'fclass'=>$fclass]);}else{ return view('search',['rflag'=>2]);}
查询操作主要实现代码如上,我们使用rflag标识查询结果,如果存在记录该值为1,否则为2,,当为1时同时传递记录集给模板。模板在接收参数后,根据参数值不同做出响应。模板部分代码如下:
@if(@$rflag==2)//查询结果为空时显示信息
"Query result is empty,please rechoose condition"
@endif@if(@$rflag==1) //不为空时获取记录集并通过foreach前端进行输出展示 ... @foreach($res as $r)
...
@endforeach @endif
前端显示航班条目信息,主要布局代码与实现样式描述如下:
3、功能测试
按照项目模块开发要求,该部分测试主要包括提示信息测试与操作成功功能测试两部分,其中提示信息测试主要包括出发地目的地重复测试、日期未选择测试、查询结果空测试,及实现功能测试。各测试结果截图如下:
本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。期待大家关注!相关文章链接如下:
Laravel框架-用户注册功能实现(路由、控制器、视图)
Laravel框架-数据填充(Seeder,Factory)实例分析