我们应该强行卸载通过loadModel()加载的模型

时间:2012-08-10 12:57:52

标签: cakephp

是否应该调用cakePHP中的unloadModel函数来卸载使用loadModel()函数加载的模型?

我找到了卸载方法,

http://api20.cakephp.org/file/Cake/Model/BehaviorCollection.php#method-BehaviorCollectionunload

但它似乎用于行为。我是新蛋糕。有没有这样的函数,或者当被调用的操作失去范围时它会自动卸载吗?

还有一个疑问;正在使用loadModel来对抗MVC的常规约定?它有任何不良影响吗?

2 个答案:

答案 0 :(得分:3)

您无需卸载模型。如果您要在整个Controller中使用该模型,请使用$uses变量:

public $uses = array('MyModel', 'AnotherModel');

如果您要在特定操作中使用它,请使用loadModel

$this->loadModel('MyModel');

就是这样 - 不需要卸货。

不,这不是对抗MVC imo而且我没有看到任何不利影响。

加载模型非常常见。示例 - 我的大多数项目都需要一些“主页”,这些“主页”的数据差异很大。在这种情况下,我创建了一个“DashboardsController”,它甚至没有表 - 然后我在需要访问它的数据时加载每个模型。 (如果我要在所有操作中使用它的数据,则使用$uses

答案 1 :(得分:1)

不,行为和模型是两回事。

行为通过钩子添加功能。含义:它们改变了模型中其他方法的工作方式。因此,如果您想自动对数据进行地理编码,则需要使用地理编码器行为。或者,如果您希望在查找时解密结果,则添加解密行为。 因此,您需要选择分离/卸载行为,因为您可能不希望在某些时候使用此功能。

模型只是访问数据库或提供包装器方法。它们不必被删除,以便网站的其余部分能够正常运行,因为它们不会改变其他方法的工作方式。

loadModel只是一种动态加载不自动关联的模型的方法。从您需要这些模型的控制器操作中完全可以做到这一点。