cakephp$使用$this->;负荷模型

cakephp$使用$this->;负荷模型,cakephp,controller,Cakephp,Controller,$uses和$this->loadModel()之间有什么区别? CakePHPCookbook,第2版。 第61页: $this->loadModel('User',2) 第62页: 类RecipesController扩展AppController{ public$uses=array('Recipe','User'); 提前感谢!根据和的文档,$uses是使一个或多个模型可供整个控制器使用的一种简单方法,当您希望访问不在$uses列表中的模型时,loadModel使用定义了控制器可以通过

$uses和$this->loadModel()之间有什么区别?
CakePHPCookbook,第2版。
第61页:
$this->loadModel('User',2)
第62页:
类RecipesController扩展AppController{
public$uses=array('Recipe','User');


提前感谢!

根据和的文档,
$uses
是使一个或多个模型可供整个控制器使用的一种简单方法,当您希望访问不在
$uses
列表中的模型时,
loadModel
使用定义了控制器可以通过defaul访问的模型t、 如果您不定义此项,则它将是该控制器的模型,即默认情况下UsersController将加载用户(以及AppController的$uses中定义的任何模型)

loadModel也会这样做,但是只有在调用它的地方,如果您只需要在一个操作中使用该模型,而不需要在其他操作中使用该模型,这会更好

您还可以使用ClassRegistry::init('Recipe')->find('all');等等,它将返回模型的单个实例供一次性使用,但不会将模型添加到对象映射中

您真正应该问自己的是,为什么要将模型加载到控制器中?理想情况下,您应该在模型之间建立关系,例如,如果您在配方控制器中,您可以调用$this->Recipe和$this->Recipe->User

我发现,在默认情况下无法直接访问模型的Shell中,使用是最常见的


根据ndm的注释编辑“[…]每次调用控制器方法时,将添加模型。”不知道你到底想说什么,但这是不正确的,即使在旧的蛋糕版本中也是如此。为什么我要提到旧的蛋糕版本?因为从2.x开始,模型是,单独定义
$uses
不会加载任何内容,模型只会在你试图访问它时加载,请参阅。非常感谢。我在Plugin JobDi中有这个片段目录,它可以工作:类JobCategoryNamesController扩展JobDirectoryAppController{//public$uses=array('JobDirectory.JobCategoryName');公共函数索引(){//$this->loadModel('JobDirectory.JobCategoryName');$res=$this->JobCategoryName->find('all');$this->set('res,$res);}如您所见,$uses和$this->load都有注释。它是如何工作的?根据您的注释ndm进行编辑,我对我的初始答案有误。默认情况下,jstar JobCategoryNames将使用JobDirectoryAppController:::$uses中指定的JobCategoryName模型和任何JobDirectoryAppController:$uses。如果您指定$uses,则需要确保您的数组中有JobCategoryName它需要继续工作。非常感谢,HelloSpeakman!你把一切都说清楚了。正如Cornelb先生所指出的:“允许控制器通过$uses变量访问其他模型,还必须包括当前控制器模型的名称”,但我没有立即得到它。