好吧,假设有两个关联的模型,其中主模型与另一个模型具有hasMany关系。捐赠者有很多捐赠。我已经阅读了大部分蛋糕的文档,我也注意到了这一点(来自文档):
'在使用相关模型时,重要的是要意识到这一点 保存模型数据应始终由相应的CakePHP完成 模型。如果您要保存新帖子及其关联的评论,那么 您将在保存操作'(http://book.cakephp.org/2.0/en/models/saving-your-data.html)
期间使用Post和Comment模型
正如@burzum对我的另一个问题所指出的那样:CakePHP - Controller or No Controller?,我仍然在努力决定哪种方法效果最好。
因此,参考前面提到的“捐赠和捐赠”示例,假设我们希望用户向捐赠者添加捐赠。因此,对于用户添加捐赠,需要查看捐赠者,访问该类别的网址:'domain / donor / view / 1',这意味着用户当前正在查看ID为1的捐赠者。然后在该视图中,让我们假设有一个允许用户添加捐赠的按钮。现在从我被告知的内容和我读到的内容来看,添加(捐赠)动作应该属于donationsController。
我们还假设添加(捐赠)操作有自己的视图..因此,如果我在'domain / donor / view / 1',用户将被重定向到'domain / donations / add / donor_id:1'然后使用。检索捐赠者的身份
$this->request->params['named']['post_id']
并设置为FK如下:
`$ this-> request-> data ['Donation'] ['donor_id'] = $ id;
但是我有一种直觉,告诉我这不是正确的方法,当有相关的模型时,从一个控制器跳到另一个控制器感觉不好。
对此有何见解?是否有可以应用或遵循的一般经验法则?是否可以将用户从donorController的视图操作重定向到donationsController的添加操作?
提前致谢!
答案 0 :(得分:1)
据我所知,您的方法没有错,并且从视图中链接其他控制器是正常的。
然而,我更喜欢(这是我的经验法则,我不确定是一种“最佳做法”)让用户更改添加相关模型 - 在您的情况下捐赠 - 直接从“主要的“模型。我在我的应用程序中使用过这种方法,主要是考虑用户体验(不知道是不是你的情况)。因此,如果您处于捐赠者的编辑操作中,则在相应视图中,用户可以添加捐赠并将其发送到捐赠者的编辑操作。如果请求数据格式正确,您可以在此保存关联的模型:
data['Donor'] = array('id'=> XX);
data['Donation'] = array('id' => YY, 'amount' => blabla,...);
$this->Donor->save(data);
这会尊重MVC(没有丑陋的ClassRegistry :: Load ......)并且保持代码简单,避免从一个控制器跳到另一个控制器。 只是我的意见:D
问候。