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
。
我目前正在 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
。