我的目录应用目录结构如下 :
www WEB部署目录
├─application 应用目录
│ ├─admin 模块目录
│ │ ├─controller
│ │ ├─model
│ │ ├─view
│ │ ├─config
│ │ └─ ...
│ ├─member 模块目录
│ │ ├─admin
│ │ ├─controller
│ │ ├─model
│ │ ├─view
│ │ ├─config
│ │ └─ ...
│ ├─extend
│ │ ├─behavior
│ │ ├───InitConfig.php
member模块分两层,controller为正常的访问 index.php/member/index/index
admin模块通过 admin.php/login/index/index 如此访问。
member模块下的admin目录为后台管理的控制器通过 admin.php/member/index/index 这样来访问。
如此来实现多模块均分两层前台和后台。
首先定义一个钩子。
extend/behavior/InitConfig.php 内容如下:
class InitConfig{
public function appInit(){
$pathInfo = strtolower($_SERVER['PATH_INFO']);
$arrPath = explode('/', $pathInfo);
if(MODULE_MARK == 'admin'){
config('default_module','admin');
if($arrPath[0] != 'admin') config('url_controller_layer','admin');
}
}
}
TP5.1需要在application/tags.php 中定义钩子。
'app_init' => ['behavior\\InitConfig'],
在tags.php中修改app_init为此内容值为命名空间的路径。
在5.0版本中可以设置在appBegin() 中,但5.1设置到appBegin中是不起作用的。
5.0版本的appBegion是这样设置的。
public function appBegin($params){
if(MODULE_MARK == 'admin' && $params['module'][0] != 'admin' && !empty($params['module'][0])){
config('url_controller_layer','admin');
}
}
因为在appInit中无法通过request()获取到模块的名称。所以通过$_SERVER变量的pathInfo来获取pathInfo的信息,然后进行分隔来获取数模块名称。
confing配置中的url_controller_layer的意思就是controller的目录。默认情况下controller的目录就是controller我们可以看到在每个模块下几乎都有controller目录。但我们为了分隔多个功能区域所以将管理的控制器全放到admin目录中,前面的控制器全放到controller目录中。这样就达到了我们的目的。