TableRegistry 无法找到 table(命名空间问题?)

TableRegistry unable to find table (namespace issue ?)

我目前正在 Slim Framework 3 项目中使用 CakePHP 3 的 ORM。

我为我的命名空间和 类 使用了 CakePHP 的命名约定。我试图通过访问用户的 table(位置:App\Model\Table\UsersTable.php)来获取我的用户。

在我的控制器中(App\Controller\UsersController.php),当我尝试时:

$usersTable = TableRegistry::get('Users'); // NOT working
$usersTable = TableRegistry::get('Users', ['className' => \App\Model\Table\UsersTable::class]); // working

我必须专门设置我的类名(这太可怕了,因为我需要在每个控制器和 table(对于关联)类 中都这样做)。我不明白我做错了什么以及为什么 CakePHP 无法检索这些 类.

我的composer.json如下:

{
    "require": {
        "slim/slim": "^3.0",
        "cakephp/orm": "^3.2",
        "cakephp/validation": "^3.2",
        "cakephp/i18n": "^3.2",
    },
    "autoload": {
        "psr-4": {
            "App\": "src"
        }
    }
}

我的项目文件位于 src/ 下(例如,用户的 table 在 src/Model/Table).

有谁知道我该如何解决这个问题并直接使用 TableRegistry::get('Users'); 并被迫添加类名?

这就是使用非标准命名空间时发生的情况,and/or 没有(正确)配置基本命名空间选项,即 App.namespace

短类名解析需要了解可能的基本命名空间,否则无法构建正确的完全限定名称,即您必须告诉 CakePHP App

\Cake\Core\Configure::write('App.namespace', 'App');

如果没有此信息,短类名只会解析为 Model\Table\UsersTable