使用自定义模型,继承自CakePHP中的烘焙模型

湍流

社区,

从其他MVC-Frameworks / persistance-API(例如Java世界中的休眠)中,我知道了一种最佳实践机制,可以从生成的模型结构继承并将这些继承的模型用作应用程序中的DAO。我特别喜欢这种方法,因为您可以在数据库更改后轻松重新创建模型以调整模型关联,而无需覆盖访问代码(自定义方法,事件回调等)。

但是,我找不到与CakePHP类似的东西。

到目前为止我尝试过的

我实现此目标的第一种方法是使用CakePHPs App :: build()函数。我为烘焙的模型和控制器注册了新的插件指令,并用自己的实现文件夹替换了默认的模型和控制器软件包:

在bootstrap.php中:

App::build(array(
        'BakedModel' => array(ROOT. DS . APP_DIR . '/Model/'),
        'BakedController' => array(ROOT. DS . APP_DIR . '/Controller/')
    ),
    App::REGISTER
);

App::build(array(
        'Model' => array(ROOT. DS . APP_DIR . '/Model/impl/'),
        'Controller' => array(ROOT. DS . APP_DIR . '/Controller/impl/')
    ),
    App::RESET
);

在impl文件夹中创建我的自定义控制器和模型后,从引用的烘焙模型中导入和继承:

我的自定义模型:

App::uses('Inmessage', 'BakedModel');

class InmessageDao extends Inmessage {
    var $useTable = 'inmessages';
    ...
}

但是,只要我为自定义模型类分配了新的唯一名称(iE InmessageDao扩展了Inmessage),此方法就起作用。使用另一个模型名的问题是,所有继承的模型关系都不会引用我的其他自定义实现,而是引用烘焙的模型。因此,我需要将所有关系复制并更改到我的自定义模型中,以使其正常工作,然后缺少继承的优势。所以我在这里什么都没得到。

如果我尝试对自定义模型使用相同的名称,则Cake无法再处理不同的对象。这种方法导致ClassNotFoundException

class Inmessage extends Inmessage {
    ...
}

所以我的问题是:

有人知道是否存在适当地继承模型并使用它们代替烘焙模型的方法吗?

或者是另一种仅重新建立模型关系而不覆盖模型类中编写的代码的方法?

提前致谢!

ps。我当前正在运行2.5.8版。

burzum

我特别喜欢这种方法,因为您可以在数据库更改后轻松重新创建模型以调整模型关联,而无需覆盖访问代码(自定义方法,事件回调等)。

这不是CakePHP中的工作方式。如果更改了架构,则模型将检测到更改,除非您使用Model :: $ _ schema手动描述了架构。

我不知道您在说什么Java框架,但这听起来像您有一个Schema类,并且您的模型扩展了该架构类。

但是,如果数据库架构遵循CakePHP约定,则Cake将检测到关联因此,如果存在带有user_id字段的配置文件表,即使没有手动创建关联,也可以执行$ User-> Profile。但这是不推荐的。

或者是另一种仅重新建立模型关系而不覆盖模型类中编写的代码的方法?

另外,我看不到手动添加新的assoc的问题,只需几秒钟的时间。烘焙模型后,无需一遍又一遍地重新烘焙模型。

如果您正在寻找实现可重用代码的地方,请查看“行为”,或将其放入AppModel中(如果应用程序中的每个模型都需要该功能)

我不确定我是否能正确解决您的全部问题,希望这可以使一切变得更加清晰。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用CFWHEELS在模型中添加自定义方法

来自分类Dev

模式中的模型数据使用自定义连接创建

来自分类Dev

TPT继承项目中具有valueinjector的View模型中的自定义属性

来自分类Dev

骨干模型中的自定义属性

来自分类Dev

自定义用户模型中的EmbeddedModelField

来自分类Dev

模型中的自定义功能

来自分类Dev

Groovy模板中的自定义模型

来自分类Dev

访问模型中的自定义方法

来自分类Dev

CakePHP 3:如何创建自定义模型回调?

来自分类Dev

如何在cakephp3中为无模型表单创建自定义验证

来自分类Dev

CakePhp在一个自定义模型中访问多个表

来自分类Dev

Cakephp 3自定义密码列以在模型中使用_setPassword方法?

来自分类Dev

Cakephp 3自定义密码列以在模型中使用_setPassword方法?

来自分类Dev

使用实体框架创建自定义模型,该模型不是数据库中任何表的模型

来自分类Dev

自定义模型方法

来自分类Dev

在TensorFlow中定义自定义模型/架构

来自分类Dev

如何使用打字稿在猫鼬模型中定义自定义查询助手?

来自分类Dev

在laravel中的自定义路径中创建模型

来自分类Dev

当尝试显示关联的模型字段时,使用包含的CakePHP3自定义查找器方法不起作用

来自分类Dev

如何将CakePHP 2模型关联更改为使用bindModel和自定义查找器进行深层链接?

来自分类Dev

Django中的自定义查询和模型

来自分类Dev

在Laravel中自定义模型存储的验证规则

来自分类Dev

在Alfresco的自定义模型中获取关联文档的路径

来自分类Dev

在Laravel模型中创建自定义变量/属性

来自分类Dev

如何从自定义指令中响应模型更改?

来自分类Dev

Django模型中的自定义ID字段

来自分类Dev

如何在MVC中绑定自定义模型类

来自分类Dev

从自定义Django用户模型中删除密码

来自分类Dev

YII2:搜索模型中的自定义排序

Related 相关文章

  1. 1

    使用CFWHEELS在模型中添加自定义方法

  2. 2

    模式中的模型数据使用自定义连接创建

  3. 3

    TPT继承项目中具有valueinjector的View模型中的自定义属性

  4. 4

    骨干模型中的自定义属性

  5. 5

    自定义用户模型中的EmbeddedModelField

  6. 6

    模型中的自定义功能

  7. 7

    Groovy模板中的自定义模型

  8. 8

    访问模型中的自定义方法

  9. 9

    CakePHP 3:如何创建自定义模型回调?

  10. 10

    如何在cakephp3中为无模型表单创建自定义验证

  11. 11

    CakePhp在一个自定义模型中访问多个表

  12. 12

    Cakephp 3自定义密码列以在模型中使用_setPassword方法?

  13. 13

    Cakephp 3自定义密码列以在模型中使用_setPassword方法?

  14. 14

    使用实体框架创建自定义模型,该模型不是数据库中任何表的模型

  15. 15

    自定义模型方法

  16. 16

    在TensorFlow中定义自定义模型/架构

  17. 17

    如何使用打字稿在猫鼬模型中定义自定义查询助手?

  18. 18

    在laravel中的自定义路径中创建模型

  19. 19

    当尝试显示关联的模型字段时,使用包含的CakePHP3自定义查找器方法不起作用

  20. 20

    如何将CakePHP 2模型关联更改为使用bindModel和自定义查找器进行深层链接?

  21. 21

    Django中的自定义查询和模型

  22. 22

    在Laravel中自定义模型存储的验证规则

  23. 23

    在Alfresco的自定义模型中获取关联文档的路径

  24. 24

    在Laravel模型中创建自定义变量/属性

  25. 25

    如何从自定义指令中响应模型更改?

  26. 26

    Django模型中的自定义ID字段

  27. 27

    如何在MVC中绑定自定义模型类

  28. 28

    从自定义Django用户模型中删除密码

  29. 29

    YII2:搜索模型中的自定义排序

热门标签

归档