我目前正在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?
答案 0 :(得分:1)
使用非标准命名空间和/或不配置基本命名空间选项(正确)时会发生这种情况,即App.namespace
。
短类名解析需要了解可能的基本名称空间,否则无法构建正确的完全限定名称,即必须告诉CakePHP App
\Cake\Core\Configure::write('App.namespace', 'App');
如果没有此信息,短类名将仅解析为Model\Table\UsersTable
。