我在本地用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
