提问者:小点点

CakePHP-保存相关模型数据


好的,假设有两个关联的模型,其中主模型与另一个模型有很多关系。前捐赠者有很多捐赠。我已经阅读了cake的大部分文档,我也注意到了这一点(从文档中):

在使用相关模型时,必须认识到保存模型数据应该始终由相应的CakePHP模型完成。如果您正在保存一篇新文章及其关联的评论,那么在保存操作的过程中,您将同时使用文章和评论模型(http://book.cakephp.org/2.0/en/models/saving-your-data.html)

正如@burzum在我的另一个问题上所指出的:CakePHP-Controller还是No Controller?,我仍然在努力决定哪种效果最好。

因此,以前面提到的“捐助者和捐赠”为例,假设我们希望用户向捐助者添加捐赠。因此,对于添加捐赠的用户来说,需要查看捐赠人,访问类型为“域/捐赠人/视图/1”的网址,这意味着用户当前正在查看id为1的捐赠人。然后在这个视图中,让我们假设有一个按钮,允许用户添加捐赠。现在从我被告知的和我读到的来看,添加(捐赠)操作应该属于捐赠控制器。

我们还假设添加(捐赠)操作有自己的观点。。因此,如果我在“域/捐赠者/视图/1”,用户将被重定向到“域/捐赠者/添加/捐赠者\u id:1”,然后使用$this检索捐赠者的id-

但我有一种直觉告诉我,这不是正确的方式,当有关联的模型时,从一个控制器跳到另一个控制器感觉很糟糕。

对此有什么见解吗?是否有一个可以应用或遵循的一般经验法则?是否可以将用户从donorsController的查看操作重定向到donationsController的添加操作?

提前谢谢!


共1个答案

匿名用户

据我所知,你的方法没有错,从一个视图链接其他控制器是正常的。

然而,我更喜欢(这是我的经验法则,我不确定是否是“最佳实践”)直接从“主”模型的视图向用户提供添加关联模型的更改(在您的案例中是捐赠)。我在我的应用程序中使用过这种方法,主要是考虑到用户体验(不知道这是否是您的情况)。因此,如果您处于捐赠者的编辑操作中,用户可以在相应的视图中添加捐赠并将其发送到捐赠者的编辑操作。如果请求数据格式正确,您可以在此处保存关联模型:

data['Donor'] = array('id'=> XX);
data['Donation'] = array('id' => YY, 'amount' => blabla,...);
$this->Donor->save(data);

这将尊重MVC(没有丑陋的ClassRegistry::Load…)并保持代码简单,避免从一个控制器跳到另一个控制器。我的意见是:D

问候。