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