最近要构建个比较复杂项目,划分模块的很多,查了下用户手册模块的目录配置比较简单,但关于模型多目录的设置却没有找到,后来全网搜索终于找到多目录模型的用法,在此梳理下做个记录。
开启多模块设置需要指定application.ini中的modules参数,多个模块用,隔开。顺便指定下默认模块。
;模块配置application.modules = "index,api,member";设置默认模块application.dispatcher.defaultModule = index
然后建立相关模块目录,大致目录解构如下。
+ application|+ models //模型目录|+ Api //api模型目录- Member.php|+ Member //member模型目录- Member.php- Member.php|+ controllers //默认控制器目录|+ views //默认视图目录|+ modules //其他模块目录|+ Api //api模块文件夹|+ controllers //模块下的控制器目录|+ views //模块下的视图目录|+ Member //member模块文件夹|+ controllers //模块下的控制器目录|+ views //模块下的视图目录|+ library //自定义或第三方类库目录|+ plugins //插件目录
默认模块的控制器文件和模版文件可以直接放到application下的相关目录下,其它模块的要放到modules下的相关目录中,至此多模块配置全部完成。
下面说说模型的目录分组调用及注意事项,Yaf框架的模型目录是固定的不会跟随模块目录来建立,在任何模块下的控制器中调用模型都是基于models目录来查找,这部分的内容手册中貌似没有什么说明,其实yaf的控制器和模型都是可以通过_下划线的规则来进行目录分组的。比如一个模型类名为Api_TestModel,调用时会自动加载/application/models/api/Member.php模型文件。
注意看上面的目录结构,在models目录下一共有3个member.php模型文件,分别对应的模型类名如下
class MemberModel extends DB { }class Api_MemberModel extends DB { }class Member_MemberModel extends DB { }
注意:Yaf框架的大多数文件夹名称都是以小写字母命名,分模块后,模块目录首字母需要大写。控制器或模型分组后,分组目录的首字母也需要大写。
实际开发过程中不建议刻意对模型进行分组,毕竟代码的灵活性与重用性很重要。控制器也可以这样命名的哦,有好奇心的同学可以去动手了解一下。