社区,
从其他 MVC 框架/持久性 API,例如 java 世界中的 hibernate,我知道从生成的模型结构继承并将这些继承的模型用作应用程序中的 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 {
...
}
所以我的问题是:
有谁知道是否有一种方法可以正确继承模型并使用它们而不是烘焙模型?
或者另一种只重新烘焙模型关系而不覆盖模型类中的书面代码的方法?
提前致谢!
附言。我目前正在运行 2.5.8 版。