记录一次问题:ThinkPHP6多应用模式启用失败原因

上周刚发现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          入口文件
	

接下来是具体内容:

  1. 想要使用多应用模式,需要安装多应用模式扩展:think-multi-app
    和tp6本身一样,安装扩展需要使用composer。

    	#在项目根目录下运行composer命令安装
    	composer require topthink/think-multi-app
    
  2. 安装了扩展之后,需要进行切换操作。
    tp6识别单应用的标识就是app目录下的controller目录,所以单应用切换成多应用模式的方法,就是删除app下的controller目录

  3. 一般情况下,这时候你访问多应用模块的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;
            }
        }
    

你可能感兴趣的:(thinkphp6,多应用模式,php,thinkphp)