PHP框架下基于分组目录和单一入口的视图呈现方法及***
技术领域
本发明涉及PHP(Hypertext Preprocessor,超文本预处理器)框架下的视图功能开发技术领域,具体来讲是一种PHP框架下基于分组目录和单一入口的视图呈现方法及***。
背景技术
在互联网应用中,大部分应用程序都需要进行视图页面的呈现。通常情况下,视图页面的呈现需要利用到视图文件和视图数据(视图中所需呈现的数据),视图文件是呈现用户界面的文件,存储在视图文件目录(所有视图文件所在的目录)下;视图数据则通过执行控制器文件而获取得来,该控制器文件是实现各项功能的业务逻辑代码文件,存储在控制器目录下。
PHP语言作为网络开发的强大语言之一,具有开放源代码,跨平台性强,开发快捷,效率高等优点,得到了广泛推广和应用。目前,在实现视图页面的呈现功能的开发中,也多数运用的是php框架下的代码开发。
但是,现有的互联网后台PHP框架普遍采用是单控制器目录以及控制器多入口的实现方式组织代码,也就是说***的控制器目录仅有一个且控制器目录下的每个控制器文件均具有多个入口(一个入口代表着这个控制器文件相应能实现的一个功能,多个入口则表示该控制器文件中包含有实现多个功能的多种代码)。随着代码工程量的不断增大,单控制器目录的实现方式使得后端控制器文件都集聚在一个目录下,导致控制器文件查找困难且维护困难;除此之外,多入口的控制器文件也使得一个控制器文件中由于汇集了多种功能代码,而使得文件内容会随着业务的复杂度增大而大大增多,最终导致控制器文件变的庞大,而难以维护。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种PHP框架下基于分组目录和单一入口的视图呈现方法及***,能在实现视图呈现功能的同时,使得控制器文件查找便捷、易于维护,且不会出现控制器文件过于庞大的问题。
为达到以上目的,本发明提供一种PHP框架下基于分组目录和单一入口的视图呈现方法,包括以下步骤:
A、创建***目录架构,该***目录架构包括***控制器总目录和***视图总目录,***控制器总目录下设有至少一个控制器目录,每个控制器目录下设有至少一个控制器文件,每个控制器文件具有单一入口且与一个控制器ID相匹配;***视图总目录下设有至少一个视图文件目录,每个视图文件目录下设有至少一个视图文件,每个视图文件的视图文件名与控制器ID一致,转入步骤B;
B、发起视图请求,视图请求中包括用户请求的控制器目录和用户请求的控制器ID,转入步骤C;
C、收到视图请求后,对视图请求进行解析,得到用户请求的控制器目录和用户请求的控制器ID,转入步骤D;
D、根据用户请求的控制器目录,在所述***控制器总目录下查找到对应的控制器目录;在查找到的控制器目录下根据用户请求的控制器ID查找到与该控制器ID相匹配的控制器文件;判定查找到的控制器文件所具有的单一入口为实现视图功能的入口后,通过所述单一入口执行控制器文件中的功能代码,获取到呈现视图页面所需的视图数据,转入步骤E;
E、根据用户请求的控制器ID,在所述***视图总目录下查找到对应的视图文件,转入步骤F;
F、利用查找到的视图文件和获取到的视图数据,进行视图页面的呈现,结束。
在上述技术方案的基础上,步骤B中,发起视图请求时是按照规定的请求格式进行发送的,规定的请求格式为:http://xxx.com/控制器目录/控制器ID;步骤C中所述对视图请求进行解析,得到用户请求的控制器目录和用户请求的控制器ID,具体包括以下操作:通过截取视图请求的字符串,得到控制器目录与控制器ID整合在一起的内容;再根据控制器目录与控制器ID之间的斜线分割符“/”,分别得到用户请求的控制器目录部分和用户请求的控制器ID部分。
在上述技术方案的基础上,步骤D中,若未查找到对应的控制器目录,或者未查找到与该控制器ID相匹配的控制器文件,或者判定查找到的控制器文件所具有的单一入口不是实现视图功能的入口,则直接抛出错误提示后,结束;步骤E中,若未查找到对应的视图文件,也直接抛出错误提示后,结束。
在上述技术方案的基础上,所述***控制器总目录下的控制器目录与所述***视图总目录下的视图文件目录一一对应;步骤E中所述根据用户请求的控制器ID,在所述***视图总目录下查找到对应的视图文件,具体包括以下操作:在***目录架构中的***视图总目录下,找到与步骤D查找到的控制器目录相对应的一个视图文件目录;根据用户请求的控制器ID,在找到的视图文件目录下找到视图文件名与控制器ID一致的视图文件。
在上述技术方案的基础上,步骤A中,创建***目录架构时,对实现视图功能的控制器文件单一入口的名称做了统一定义;步骤D中,判定查找到的控制器文件所具有的单一入口为实现视图功能的入口的具体过程为:判断查找到的控制器文件的单一入口名是否为定义的实现视图功能的单一入口的名称,若是,则判定查找到的控制器文件所具有的单一入口为实现视图功能的入口。
本发明同时还提供一种PHP框架下基于分组目录和单一入口的视图呈现***,包括***目录架构创建单元、视图请求发起单元、视图请求解析单元、视图数据获取单元、视图文件查找单元和视图页面呈现单元;
所述***目录架构创建单元用于:创建***目录架构,该***目录架构包括***控制器总目录和***视图总目录,***控制器总目录下设有至少一个控制器目录,每个控制器目录下设有至少一个控制器文件,每个控制器文件具有单一入口且与一个控制器ID相匹配;***视图总目录下设有至少一个视图文件目录,每个视图文件目录下设有至少一个视图文件,每个视图文件的视图文件名与控制器ID一致;
所述视图请求发起单元用于:向视图请求解析单元发起视图请求,所述视图请求中包括用户请求的控制器目录和用户请求的控制器ID;
所述视图请求解析单元用于:收到视图请求后,对视图请求进行解析,得到用户请求的控制器目录和用户请求的控制器ID;
所述视图数据获取单元用于:根据用户请求的控制器目录,在所述***控制器总目录下查找到对应的控制器目录;在查找到的控制器目录下根据用户请求的控制器ID查找到与该控制器ID相匹配的控制器文件;判定查找到的控制器文件所具有的单一入口为实现视图功能的入口后,通过所述单一入口执行控制器文件中的功能代码,获取到呈现视图页面所需的视图数据;
所述视图文件查找单元用于:根据用户请求的控制器ID,在所述***视图总目录下查找到对应的视图文件;
所述视图页面呈现单元用于:利用查找到的视图文件和获取到的视图数据,进行视图页面的呈现。
在上述技术方案的基础上,所述视图请求发起单元向所述视图请求解析单元发起视图请求时是按照规定的请求格式进行发送的,规定的请求格式为:http://xxx.com/控制器目录/控制器ID;所述视图请求解析单元对视图请求进行解析,得到用户请求的控制器目录和用户请求的控制器ID的具体过程为:所述视图请求解析单元通过截取视图请求的字符串,得到控制器目录与控制器ID整合在一起的内容;再根据控制器目录与控制器ID之间的斜线分割符“/”,分别得到用户请求的控制器目录部分和用户请求的控制器ID部分。
在上述技术方案的基础上,所述视图数据获取单元若未查找到对应的控制器目录,或者未查找到与该控制器ID相匹配的控制器文件,或者判定查找到的控制器文件所具有的单一入口不是实现视图功能的入口,则直接抛出错误提示后,结束操作;所述视图文件查找单元若未查找到对应的视图文件,也直接抛出错误提示后,结束操作。
在上述技术方案的基础上,所述***控制器总目录下的控制器目录与所述***视图总目录下的视图文件目录一一对应;所述视图文件查找单元查找到对应的视图文件的具体过程为:在***目录架构中的***视图总目录下,找到与所述视图数据获取单元查找到的控制器目录对应的视图文件目录;根据用户请求的控制器ID,在找到的视图文件目录下找到视图文件名与控制器ID一致的视图文件。
在上述技术方案的基础上,所述***目录架构创建单元在创建***目录架构时,对实现视图功能的控制器文件单一入口的名称做了统一定义;所述视图数据获取单元判定查找到的控制器文件所具有的单一入口为实现视图功能的入口的具体过程为:判断查找到的控制器文件的单一入口名是否为定义的实现视图功能的单一入口的名称,若是,则判定查找到的控制器文件所具有的单一入口为实现视图功能的入口。
本发明的有益效果在于:
1、本发明中,创建的***目录架构为多级多组的目录结构,具体来说:***目录架构包括***控制器总目录和***视图总目录;***控制器总目录下设有至少一个控制器目录,每个控制器目录下设有至少一个控制器文件;***视图总目录下设有至少一个视图文件目录,每个视图文件目录下设有至少一个视图文件。这种多级多组的目录结构不但使得控制器文件能有条理的组织存放,查找便捷、易于维护,而且能支持无限级的目录分组,适用性强。除此之外,***目录架构中的每个控制器文件仅具有单一入口,即每个控制器文件仅实现一个相应功能,也就是说单个控制器文件中的功能代码只有一种,这就使得单个控制器文件不会因业务复杂度的增大而变得过于庞大,从而使得单个控制器文件不但运行效率高且维护简便。
2、本发明的***目录架构中,视图文件的视图文件名与控制器ID一致,且***控制器总目录下的控制器目录与***视图总目录下的视图文件目录是一一对应。视图文件名与控制器ID一致,使得在进行视图文件的查找时,可直接根据用户请求的控制器ID来进行查找,无需另外获取其他用户请求信息,操作方便、快捷;除此之外,由于视图文件目录与控制器目录也是一一对应的,因此,本发明在直接查找视图文件之前先进行视图文件目录的定位,即找到与用户请求的控制器目录所对应的视图文件目录,然后在该视图文件目录下再去进行视图文件的查找,不但提高视图文件的查找效率且准确率高。
3、本发明中,对实现视图功能的控制器文件单一入口的名称做了统一定义。因此,在进行控制器文件的入口功能判断时,可直接通过单一入口名来判断该入口是否为实现视图功能的入口,判断过程简单、方便、高效。
4、本发明的***目录架构在包含***控制器总目录和***视图总目录的基础上,还可根据需要增加实现扩展功能的其他目录,满足了***目录架构的可扩展性要求。
附图说明
图1为本发明实施例中PHP框架下基于分组目录和单一入口的视图呈现方法的流程图;
图2为本发明实施例中PHP框架下基于分组目录和单一入口的视图呈现***的结构框图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种PHP框架下基于分组目录和单一入口的视图呈现方法,包括以下步骤:
步骤S1:创建***目录架构,该***目录架构包括***控制器总目录和***视图总目录,***控制器总目录下设有至少一个控制器目录,每个控制器目录下设有至少一个控制器文件,每个控制器文件具有单一入口且与一个控制器ID(控制器唯一性的ID)相匹配;***视图总目录下设有至少一个视图文件目录,每个视图文件目录下设有至少一个视图文件,每个视图文件的视图文件名与控制器ID一致,且所述至少一个视图文件目录与所述至少一个控制器目录一一对应,转入步骤S2。
可以理解的是,为了满足***目录架构的可扩展性,该***目录架构在包含***控制器总目录和***视图总目录的基础上,还可根据需要增加实现扩展功能的其他目录。具体来说,本实施例中创建的***目录架构如下:
步骤S2:发起视图请求,视图请求中包含有用于寻址的主机域名、用户请求的控制器目录和用户请求的控制器ID,转入步骤S3。
步骤S3:收到视图请求后,对视图请求进行解析,得到用户请求的控制器目录和用户请求的控制器ID,转入步骤S4。
可以理解的是,发起视图请求时是按照规定的请求格式进行发送的,规定的请求格式为:http://xxx.com/控制器目录/控制器ID,即前半部分是用于寻址的主机域名,后半部分是我们所需的用户请求的控制器目录和用户请求的控制器ID。步骤S3中,对视图请求进行解析时,先通过截取视图请求的字符串,得到控制器目录与控制器ID整合在一起的内容;再根据控制器目录与控制器ID之间的斜线分割符“/”,分别得到用户请求的控制器目录部分和用户请求的控制器ID部分。
步骤S4:根据用户请求的控制器目录,在***目录架构中的***控制器总目录下查找对应的控制器目录,若查找到,则匹配成功,转入步骤S5;若未查找到,则抛出错误提示后,结束。
步骤S5:根据用户请求的控制器ID,在查找到的控制器目录下查找与该控制器ID相匹配的控制器文件,若查找到,则匹配成功,转入步骤S6;若为查找到,则抛出错误提示后,结束。
步骤S6:判断查找到的控制器文件所具有的单一入口是否为实现视图功能的入口,若是,转入步骤S7;否则,抛出错误提示后,结束。本实施例中,对实现视图功能的控制器文件单一入口的名称做了统一定义,即统一定义为“execute”。在进行控制器文件的入口功能判断时,可直接通过单一入口名来判断该入口是否为实现视图功能的入口,即直接判断该单一入口名是否为“execute”即可,判断过程简单、方便、高效。
步骤S7:通过所述单一入口执行控制器文件中的功能代码,获取到呈现视图页面所需的视图数据,转入步骤S8。
步骤S8:根据用户请求的控制器ID,在***目录架构中的***视图总目录下查找对应的视图文件,若查找到,转入步骤S9;若未查找到,则抛出错误提示后,结束。
可以理解的是,由于视图文件的视图文件名是与控制器ID一致的,因此,在进行视图文件的查找时,可直接根据用户请求的控制器ID来进行查找。除此之外,由于视图文件目录与控制器目录也是一一对应的,因此,为了提高视图文件的查找效率和正确率,可在直接查找视图文件之前先进行视图文件目录的定位,即找到与用户请求的控制器目录所对应的视图文件目录。具体来说,步骤S8中所述根据用户请求的控制器ID,在***目录架构中的***视图总目录下查找对应的视图文件,具体包括以下操作:
步骤S801:在***目录架构中的***视图总目录下,找到与步骤S4查找到的控制器目录相对应的一个视图文件目录,转入步骤S802;
步骤S802:根据用户请求的控制器ID,在找到的视图文件目录下查找视图文件名与控制器ID一致的视图文件。
步骤S9:利用查找到的视图文件和获取到的视图数据,进行视图页面的呈现,结束。
参见图2所示,本发明实施例还提供一种PHP框架下基于分组目录和单一入口的视图呈现***,包括***目录架构创建单元、视图请求发起单元、视图请求解析单元、视图数据获取单元、视图文件查找单元和视图页面呈现单元。
其中,***目录架构创建单元用于:创建***目录架构,该***目录架构包括***控制器总目录和***视图总目录,***控制器总目录下设有至少一个控制器目录,每个控制器目录下设有至少一个控制器文件,每个控制器文件具有单一入口且与一个控制器ID相匹配;***视图总目录下设有至少一个视图文件目录,每个视图文件目录下设有至少一个视图文件,每个视图文件的视图文件名与控制器ID一致,且***控制器总目录下的控制器目录与***视图总目录下的视图文件目录一一对应;
视图请求发起单元用于:向视图请求解析单元发起视图请求,所述视图请求中包括主机域名、用户请求的控制器目录和用户请求的控制器ID;
视图请求解析单元用于:收到视图请求后,对视图请求进行解析,得到用户请求的控制器目录和用户请求的控制器ID;
视图数据获取单元用于:根据用户请求的控制器目录,在所述***控制器总目录下查找到对应的控制器目录;在查找到的控制器目录下根据用户请求的控制器ID查找到与该控制器ID相匹配的控制器文件;判定查找到的控制器文件所具有的单一入口为实现视图功能的入口后,通过所述单一入口执行控制器文件中的功能代码,获取到呈现视图页面所需的视图数据;
视图文件查找单元用于:根据用户请求的控制器ID,在所述***视图总目录下查找到对应的视图文件;
视图页面呈现单元用于:利用查找到的视图文件和获取到的视图数据,进行视图页面的呈现。
需要说明的是:上述实施例提供的***在进行操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将***的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。