ThinkPHP 6 多应用模式基本介绍

ThinkPHP 6 安装完成后,默认使用单应用模式部署,目录结构如下:

├─app 应用目录
│  ├─controller         控制器目录
│  ├─model              模型目录
│  ├─view               视图目录
│  └─ ...               更多类库目录

├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写

├─view                  视图目录
├─config                应用配置目录
├─route                 路由定义目录
├─runtime               应用的运行时目录

如果要使用多应用模式,你需要安装多应用模式扩展 `think-multi-app`。

composer require topthink/think-multi-app

然后你的应用目录结构需要做如下调整(主要区别在app目录)。

├─app 应用目录
│  ├─index              主应用
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  ├─config          配置目录(优先)
│  │  └─ ...            更多类库目录
│  ├─admin              后台应用
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  ├─config          配置目录(优先)
│  │  └─ ...            更多类库目录

├─public                WEB目录(对外访问目录)
│  ├─admin.php          后台入口文件
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写

├─config                应用配置目录
│  ├─index              index应用配置
│  └─admin              admin应用配置

├─view                视图目录
│  ├─index              index应用视图目录
│  └─admin              admin应用视图目录

├─route                 路由定义目录
│  ├─index              index应用路由定义目录
│  └─admin              admin应用路由定义目录

├─runtime               运行时目录
│  ├─index              index应用运行时目录
│  └─admin              admin应用运行时目录

从目录结构可以看出来,每个应用相对保持独立,并且可以支持多个入口文件,应用下面还可以通过多级控制器来维护控制器分组。

自动多应用部署
支持在同一个入口文件中访问多个应用,并且支持应用的映射关系以及自定义。如果你通过index.php入口文件访问的话,并且没有设置应用name,系统自动采用自动多应用模式。

自动多应用模式的URL地址默认使用

// 访问admin应用
http://serverName/index.php/admin
// 访问shop应用
http://serverName/index.php/shop

也就是说pathinfo地址的第一个参数就表示当前的应用名,后面才是该应用的路由或者控制器/操作。

如果直接访问

http://serverName/index.php

访问的其实是index默认应用,可以通过app.php配置文件的default_app配置参数指定默认应用。

// 设置默认应用名称
'default_app' => 'home',

接着访问

http://serverName/index.php

其实访问的是home应用。

自动多应用模式下,路由是每个应用独立的,所以你没法省略URL里面的应用参数。但可以使用域名绑定解决。

你可能感兴趣的:(Web编程)