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

时间:2016-06-08 10:12:17

标签: cakephp orm cakephp-3.0 autoload

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

我将CakePHP的命名约定用于我的命名空间和类。我试图通过访问用户表来获取用户(位置: 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

我必须专门设置我的className(这很可怕,因为我需要在每个控制器和表(用于关联)类中执行此操作)。我不知道我做错了什么,以及为什么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 / 下(例如,用户的表位于 src / Model / Table 中)。

有没有人知道如何解决这个问题,并且可以直接使用TableRegistry::get('Users');并强制添加className?

1 个答案:

答案 0 :(得分:1)

使用非标准命名空间和/或不配置基本命名空间选项(正确)时会发生这种情况,即App.namespace

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

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

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