今天做项目时发现了一个问题
- 首先定义了一个这样的控制器,php文件名与类同名
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Db;
class QIndexValue extends BaseController
{
public function search()
{
//业务代码
return 'hello';
}
}
接口url为 /qindex/search
本地调用正常
但是部署到linux服务器上后却报错了
说明它按去查找Qindexvalue这个控制器而我的控制器叫做QIndexValue它没找到,也就是大小写问题,于是我把url的qindexvalue改成QIndexValue,就正常请求了
- 但是不对呀,查找控制器应该是框架干的事,根操作系统怎么会有关系呢?
于是我就把类名改成Qindexvalue(因为url的首字母q自动转大写了因此在这也大写),然后再用qindexvalue访问,结果:
依然报 控制器不存在:app\controller\Qindexvalue
这就说明查找控制器不是根据类名,那么只能是根据文件名了(为啥不是根据类名呢有知道的大佬可以回答一下嘛),于是我把文件名改成了Qindexvalue.php,果然请求成功了。 - 那么为什么一开始在windows能运行在linux却报错的原因也就找到了
就是因为windows对文件名大小写不敏感而linux对文件名大小写敏感。 - 补充一下,根据thinkphp官方文档,url中控制器是下划线命名的,会转成驼峰而不是按原名称查找,因此一定要注意命名规范