thinkphp 命令行 常見問題
2023-01-03 加入收藏
全局變量引問題
thinkphp一直是簡單,高效著稱的框架,當我興致匆匆的按照文檔寫完事例,在命令行下執(zhí)行,php think 的時候,what!! 并沒有我添加的命令,當我還保佑一絲希望去執(zhí)行 php think test 如愿以償?shù)牡玫搅肆顺绦虻膱箦e,報錯內容如下:
[InvalidArgumentException]
Command “test” is not defined.
發(fā)現(xiàn)了問題,怎么辦?當然要解決問題,我首先找到了一位行業(yè)混跡多年的同事詢問原因,至于為什么我不先百度直接問他,原因有兩點,第一 他就在我隔壁,對我來說只是一個轉頭的功夫,第二就是他前兩天剛做了這個功能。我覺得當下這個應用場景采取問他的解決方案是最經濟高效的。他看了一遍,我寫的代碼并沒有發(fā)現(xiàn)問題所在,于是這個找出問題的重任還是得自己完成,我去tp官方文檔看了一下評論內容,有同僚和我遇到一樣的報錯內容(報錯原因未必一樣),但是并沒有解決方法,找尋官方文檔失敗后,我決定從源碼來查找真正的原因,畢竟tp的代碼phper還是都能看得懂,經過一番代碼追蹤終于找到癥結所在,原因就是。。。
我重新定義APP_PATH全局變量,導致無法找到command配置,從而無法加載自定義命令,果斷在think文件中加入了APP_PATH的變量定義。
php thinkphp test
執(zhí)行成功!!到這里就大功告成了。
自定義命名空間引起的問題
如果在web開發(fā)中修改了config里的app_namespace字段,那么需要你在項目根目錄的think文件中添加一行如下代碼
//定義命名空間//把這里的api改為和你config中app_namespace一致就可以了define("APP_NAMESPACE","api");
這里總結一下,你在web里定義的全局變量在console下面是無法找到的,因此你需要在console中重新定義一遍。