TP5.0使用助手函數model出現\common\Model\類不存在

在ThinkPHP5.0中有一個助手助手函數model(),可以實例化具體的模型,包括分層模型,只要傳入類名(第一個參數),分層名(第二個參數)。這個函數其實是ThinkPHP框架Loader中的一個靜態方法,可以打開"thinkphp\library\think\Loader"的380行左右查看,參數和實現方法可以自行查看。

問題

在本地也就是windows環境下,我通過使用model實例自定義的模型類正常調用方法,放到服務器上(linux),發現模型類找不到,出現類似“類不存在:app\common\Model\ArticleVote”。所以就去找Loader中的model方法,因為使用了model肯定是先去調用裡面的靜態函數,然後根據傳入的參數實例化返回,有點像工廠模式。

TP5.0使用助手函數model出現\common\Model\類不存在

思路

1. 檢查使用model函數中,傳入的模型名和分層名是否都存在,也就是在application項目裡有沒有對應的模型分層名字的文件夾。

2. thinphp5.0中項目文件夾需要是小寫開頭,比如model,controller。

3. 注意定義的模型類的命名空間,是否存在大小寫混亂。

4. 出現"common\ModelArticleVote",注意"common"就是Loader中model方法走了else代碼塊。

TP5.0使用助手函數model出現\common\Model\類不存在

解決

發現了是為什麼有一個"common"是因為定義的類實例化的時候未找到,那就是在model()使用時傳入的參數有錯,要麼就是定義的模型類的命令空間有誤。可以在Loader的靜態方法中打斷點查看在實例類時的命名空間分別是什麼,然後使用class_exists函數查看是否存在,再認真看一些命名空間。最後發現果然是在model助手函數中傳入第二個參數(分層名)和模型類的命名空間沒有保持一致,一個大寫,一個小寫。

TP5.0使用助手函數model出現\common\Model\類不存在


分享到:


相關文章: