我想将模型的自动生成部分放入抽象范围,例如,如果我为表users
,\Model\Entity\User
和\Model\Table\UsersTable
生成模型,我不想在这些中编写代码类,我想创建一个实现类,例如扩展\Model\Table\UserTableImpl
的{{1}},并在那里写一个查询代码,所以我的问题是:
是否有可能以\Model\Table\UsersTable
工作的方式使用控制器自动加载这些实现类?
感谢您的帮助。
答案 0 :(得分:2)
您可以简单地重命名生成的类(例如AbstractUsersTable
),将它们标记为抽象,然后创建名称遵循CakePHP命名约定的实现(例如UsersTable extends AbstractUsersTable
),这样您就不会# 39; t必须处理表定位器,你的关联等的进一步配置。
话虽这么说,你总是可以使用完全限定的类名来加载表类,配置关联类,设置控制器默认表类等。
// load model
$this->loadModel(\App\Model\Table\UnconventionalClassName::class);
// set default controller table class
$this->_setModelClass(\App\Model\Table\UnconventionalClassName::class);
// configure association class
$this->associationType('Alias', [
'className' => \App\Model\Table\UnconventionalClassName::class
]);
// set tables entity class
$this->setEntityClass(\App\Model\Entity\UnconventionalClassName::class);
...
您甚至可以进一步创建自定义定位器和关联,将默认的Table
后缀更改为不同的内容,但我更倾向于使用方法编号1并遵循惯例。