我在本地用yii2創建了一個控制器TTeamController.php,輸入localhost/v1/tteam能夠正常訪問,但是當我復制了相應文件上傳到服務器上之后,訪問的時候卻提示以下錯誤
An Error occurred while handling another error: exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "site/error".' in D:\workspace\hdapi\vendor\yiisoft\yii2\base\Module.php:461 Stack trace: #0 D:\workspace\hdapi\vendor\yiisoft\yii2\web\ErrorHandler.php(85): yii\base\Module->runAction('site/error') #1 D:\workspace\hdapi\vendor\yiisoft\yii2\base\ErrorHandler.php(109): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException)) #2 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException)) #3 {main} Previous exception: exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "v1/tteam".' in D:\workspace\hdapi\vendor\yiisoft\yii2\base\Module.php:461 Stack trace: #0 D:\workspace\hdapi\vendor\yiisoft\yii2\web\Application.php(84): yii\base\Module->runAction('v1/tteam', Array) #1 D:\workspace\hdapi\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) #2 D:\workspace\hdapi\api\web\index.php(19): yii\base\Application->run() #3 {main} Next exception 'yii\web\NotFoundHttpException' with message '欏甸潰鏈壘鍒般€�' in D:\workspace\hdapi\vendor\yiisoft\yii2\web\Application.php:96 Stack trace: #0 D:\workspace\hdapi\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) #1 D:\workspace\hdapi\api\web\index.php(19): yii\base\Application->run() #2 {main}
詢問之后得知,我本地的yii跟服務其上的yii版本不是一個
按照錯誤提示,找到module.php,這文件中有個拼接控制器文件名稱的方法:createControllerByID、
對比兩個版本的module.php之后,證實這兩個方法確實有不同
服務其上的createControllerByID
本地的createControllerByID
標記的就是這兩個方法不同的地方。因為用到了ucwords這個方法,將輸入的tteam的首字母大寫了,
也就是說服務器上的版本要找的控制器文件的名稱是Tteamcontroller,
get_class($controller)的值是TTeamcontroller,而$className的值是Tteamcontroller,兩個不相等,所以返回的是null
而本地的沒有對比,直接返回的是$controller;
所以要解決服務其上的錯誤就需要把TTeamcontroller改為Tteamcontroller