thinkphp5控制器类文件大小写(驼峰)问题

浏览:9097 发布日期:2017/04/06 分类:求助交流 关键字: thinphp类名规范
遇见的问题与
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());
        }
    }
我的问题是:如果要开启大小写转换,能否把最终匹配的类名都用小写去匹配?

最佳答案
评论( 相关
后面还有条评论,点击查看>>