是否有可能将模型类放在抽象范围内?

时间:2017-07-06 10:05:04

标签: php cakephp cakephp-3.0

我想将模型的自动生成部分放入抽象范围,例如,如果我为表users\Model\Entity\User\Model\Table\UsersTable生成模型,我不想在这些中编写代码类,我想创建一个实现类,例如扩展\Model\Table\UserTableImpl的{​​{1}},并在那里写一个查询代码,所以我的问题是:

是否有可能以\Model\Table\UsersTable工作的方式使用控制器自动加载这些实现类?

感谢您的帮助。

1 个答案:

答案 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并遵循惯例。