首页 > 解决方案 > CakePHP 3“找不到控制器类 XYZ。” 仅在生产服务器上

问题描述

我有一个单独的 AppController 用于我网站的外部 API。我可以在本地开发机器上使用 Postman 很好地连接到 API,但是一旦我将文件移动到测试站点或生产站点,我就会收到 404 错误,例如“找不到控制器类用户”。

{
    "message": "Controller class Users could not be found.",
    "url": "/api/tv/users/index",
    "code": 404,
    "file": "/var/www/html/site/vendor/cakephp/cakephp/src/Http/ControllerFactory.php",
    "line": 100
}

Ubuntu 16.04、阿帕奇、PHP 7。

所有服务器(本地开发、测试和生产)上的代码和环境应该相同,但它只能在本地机器上运行。我什至不知道要发布什么代码,但这里有一些:

测试代码Api/TV/UsersController:

namespace App\Controller\Api\TV;

class UsersController extends AppController
{
    public function index()
    {
        $this->set([
            'message' => 'Why wont you work?',
            '_serialize' => [
               'message'
            ]
        ]);
    }
}

路线:

Router::prefix('api', function(RouteBuilder $routes) {
    $routes->connect('/v2', [
        'controller' => 'users',
        'action' => 'login',
        '_method' => 'GET'
    ]);

    ...

    $routes->fallbacks('DashedRoute');
});

Router::prefix('api/v3', function(RouteBuilder $routes) {
    $routes->setExtensions(['json']);

    $routes->fallbacks('DashedRoute');
});

Router::prefix('api/tv', function(RouteBuilder $routes) {
    $routes->setExtensions(['json']);

    $routes->fallbacks('DashedRoute');
});

如您所见,我在不同的前缀上有几个不同的 API。只有最后一个不起作用(本地除外)。

我在这里束手无策。我知道答案正盯着我看,但我需要其他人为我指出。

标签: cakephpcakephp-3.0

解决方案


所有/前缀部分(由Inflector::camelize()_ api/tv_ Api/Tv_Api\TvTvTV

长话短说,将您的TV文件夹和命名空间部分重命名为Tv.


推荐阅读