写点什么

TP5.0 使用助手函数 model 出现\common\Model\类不存在

作者:北桥苏
  • 2023-05-11
    广东
  • 本文字数:628 字

    阅读完需:约 2 分钟

在 ThinkPHP5.0 中有一个助手助手函数 model(),可以实例化具体的模型,包括分层模型,只要传入类名(第一个参数),分层名(第二个参数)。这个函数其实是 ThinkPHP 框架 Loader 中的一个静态方法,可以打开"thinkphp\library\think\Loader"的 380 行左右查看,参数和实现方法可以自行查看。

 

问题

    在本地也就是 windows 环境下,我通过使用 model 实例自定义的模型类正常调用方法,放到服务器上(linux),发现模型类找不到,出现类似“类不存在:app\common\Model\ArticleVote”。所以就去找 Loader 中的 model 方法,因为使用了 model 肯定是先去调用里面的静态函数,然后根据传入的参数实例化返回,有点像工厂模式。



思路

1. 检查使用 model 函数中,传入的模型名和分层名是否都存在,也就是在 application 项目里有没有对应的模型分层名字的文件夹。

2. thinphp5.0 中项目文件夹需要是小写开头,比如 model,controller。

3. 注意定义的模型类的命名空间,是否存在大小写混乱。

4. 出现"common\ModelArticleVote",注意"common"就是 Loader 中 model 方法走了 else 代码块。



解决

    发现了是为什么有一个"common"是因为定义的类实例化的时候未找到,那就是在 model()使用时传入的参数有错,要么就是定义的模型类的命令空间有误。可以在 Loader 的静态方法中打断点查看在实例类时的命名空间分别是什么,然后使用 class_exists 函数查看是否存在,再认真看一些命名空间。最后发现果然是在 model 助手函数中传入第二个参数(分层名)和模型类的命名空间没有保持一致,一个大写,一个小写。




用户头像

北桥苏

关注

公众号:ZERO开发 2023-05-08 加入

专注后端实战技术分享,不限于PHP,Python,JavaScript, Java等语言,致力于给猿友们提供有价值,有干货的内容。

评论

发布
暂无评论
TP5.0使用助手函数model出现\common\Model\类不存在_php_北桥苏_InfoQ写作社区