thinkphp6多应用配置路由无效分析以及解决办法

首先声明本文 仅针对thinkphp6.0.* -dev版本  

要看最终解决方法请直接拉到文 章末尾。


社区里我也搜到有人提问为什么多应用配置了路由无效,我看了下面的回答也是乱码七糟的,大致看了一下也没有找到解决办法,这个提问贴也是不了了之了。


thinkphp6感觉已经发布一段时间了,今天就小试一把,官方的安装命令

composer create-project topthink/think tp 6.0.*-dev
#等待安装成功
#配置好虚拟机域名

首先访问首页 

13载初心不改 - 你值得信赖的PHP框架 
#感觉很不错

用命令生成多应用

将根目录下 build.example.php文件改名为build.php并且要将改名后的文 件复制到app目录下

首先我就试了多应用

php think build article 
#很顺利生成一个应用

接下来配置路由:

新建路由文件:(路径:route/article/route.php)

use think\facade\Route;

Route::get('art', function () {
    return 'hello,ThinkPHP666666!';
});
#我想像中的路径应该是 http://tp6.top/index.php/art
报错:控制器不存在:app\controller\Art

接下来说一个配置文件config\app.php

这个文件中有这样的描述:

 // 自动多应用模式
    'auto_multi_app'   => false,
    // 应用映射(自动多应用模式有效)
    'app_map'          => [],
    // 域名绑定(自动多应用模式有效)
    'domain_bind'      => [],
    // 禁止URL访问的应用列表(自动多应用模式有效)
    'deny_app_list'    => [],

接着往下看

没办法把自动多应用模式设置成true

http://tp6.top/index.php/art
报错:控制器不存在:app\controller\Art

http://tp6.top/index.php/article/art
报错:控制器不存在:app\controller\Article

这里可以明显看出来不管怎么配它都进了app\controller找控制器,换个思路想它就是进了单应用模式,哪怕我手动开启了自动多应用模式,突然感觉有些S

刚开始我没找到解决办法,又实在不想去追踪代码,我直接来个大杀招把app目录下除了 build.php与我生成的  article目录外的其他文 件都删除了,看它去找哪儿。

然后访问

http://tp6.top/index.php/article/art
正确返回我配置的路由结果,这里一定要加article应用名称,因为配置官方文档讲了如果开启自动多应用必须要加应用名

再试 http://tp6.top/index.php/art
报错:控制器不存在:app\art\controller\Index
#报错就是因为第一个参数一定是应用名,证明官方文档这里没有说错。

最后得出的结论是:单应用模式与多应用模式不可同时使用,因为它一直是往app\controller里找控制器。那文档里与配置 文件里的 自动多应用模式 的说法就不对,应该叫开启多应用模式或者切换到多应用模式才对

最后不仅单应用模式与多应用模式不可以同时使用外,如果你要使用多应用模式你必须要将  app目录下的单应用文 件全部删除否则一样无法使用多应用模式。


多应用解决办法总结:

1、删除app目录下所有单应用文件

2、必须开启官方所谓的自动多应用模式,因为单应用与多应用不能同时使用

3、就是要正确配置好路径文件。


thinkphp6目前还不够完善,祝thinkphp6越来越好。

最后说明,我尝试过只删除 app\controller目录,不过还是不能进入多应用模式,所以我直接把单应用的文 件全部干掉就好了。


Tags php

留言(0)

评论