上周刚发现TP原来已经升级到了tp6,现在简单记录一下尝试过程中遇到的一些问题。
tp6把5.1版本以前的多模块拓展成了多应用模式,感觉很不错,看了一些文档感觉也没什么复杂的地方,可是在实际上手时,卡在了多应用模式切换失败。
首先说一下,tp6的默认是单应用模式,目录就是原始的结构(详细了解这部分可以直接去翻TP6官方文档)。
其次,多应用模式与单应用模式互斥,只能使用一种,可以通过改变目录结构进行切换。
#单应用
├─app 应用目录
│ ├─controller 控制器目录
│ ├─model 模型目录
│ └─view 视图目录
│
├─public WEB目录(对外访问目录)
│ └─index.php 入口文件
#多应用
├─app 应用目录
│ ├─index 主应用
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ └─view 视图目录
│ │
│ ├─admin 后台应用
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ └─view 视图目录
│
├─public WEB目录(对外访问目录)
│ └─index.php 入口文件
接下来是具体内容:
-
想要使用多应用模式,需要安装多应用模式扩展:think-multi-app 。
和tp6本身一样,安装扩展需要使用composer。#在项目根目录下运行composer命令安装 composer require topthink/think-multi-app
-
安装了扩展之后,需要进行切换操作。
tp6识别单应用的标识就是app目录下的controller目录,所以单应用切换成多应用模式的方法,就是删除app下的controller目录。 -
一般情况下,这时候你访问多应用模块的url时,已经可以成功了,比如访问http://serverName/index.php/shop,可以正确定位到shop应用下的controller中的index方法。
但是——我就是在这一步出了问题,页面提示:找不到controller下的shop类。解决:多次尝试后发现,项目配置并无问题,在本地phpstudy环境下运行正常,多应用切换成功,于是定位问题可能在nginx配置。切换到nginx.conf,发现由于是新服务器,所以还没有在url中将index.php隐藏掉,推测可能是因此影响了tp的智能识别。于是配置隐藏index.php后再访问,成功。
location / { #访问路径的文件不存在则重写URL转交给ThinkPHP处理 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; } }