http://www.thinkphp.cn/topic/36959.html(thinkphp5控制器类文件大小写问题)
类似:
控制器名称如果命名为AbcDef这种,将会遇到“找不到控制器”的错误,
就必须得关闭控制器大小写自动转换。
// 是否自动转换URL中的控制器和操作名
'url_convert' => false,经过查看源码发现/thinkphp/library/think/Loader.php中的parseClass在解析应用类的类名时,只将类名首字母转换为大写,而第二个单词无法转换。所以最终解析出来的是:app\admin\controller\Abcdef
但是Abcdef这个类是不存在的,要找的真正的类是AbcDef
源码关键位置:
/**
* 实例化(分层)控制器 格式:[模块名/]控制器名
* @param string $name 资源地址
* @param string $layer 控制层名称
* @param bool $appendSuffix 是否添加类名后缀
* @param string $empty 空控制器名称
* @return Object|false
* @throws ClassNotFoundException
*/
public static function controller($name, $layer = 'controller', $appendSuffix = false, $empty = '')
{
if (false !== strpos($name, '\\')) {
$class = $name;
$module = Request::instance()->module();
} else {
if (strpos($name, '/')) {
list($module, $name) = explode('/', $name);
} else {
$module = Request::instance()->module();
}
$class = self::parseClass($module, $layer, $name, $appendSuffix);
}
if (class_exists($class)) {
return App::invokeClass($class);
} elseif ($empty && class_exists($emptyClass = self::parseClass($module, $layer, $empty, $appendSuffix))) {
return new $emptyClass(Request::instance());
}
}我的问题是:如果要开启大小写转换,能否把最终匹配的类名都用小写去匹配?最佳答案