Cakephp:在控制器操作中维护hasMany / belongsTo关系

时间:2009-06-25 14:26:32

标签: model-view-controller cakephp

原谅问题的标题;花了20分钟试图写出一些连贯的东西(如果成功就会产生怀疑)。

无论如何,以博客为例,我们的模型如下所示:

发表了很多评论 评论belongsTo Post

假设我要添加一条新注释:保存注释时,我需要在调用save之前将外键包含在数据数组中的父Post(Post.id)中。

因为我想将关系保持在用户的上下文中 - 我 不希望他们必须从选择字段中选择一个帖子来关联评论 - 这是我看到的两个选项:

1)将评论表格放在帖子的视图中。

2)将Post Id作为参数(通过GET)传递给Comment.add操作(或写入/读取/来自Session);保存和 重定向回到父Post.view。

选项1非常适合博客,但不适用于用户的个人资料 表格太长,不能整齐地包含在用户视图中。

选项2的工作原理我想,但是我必须写一些特定于Post的显示/重定向条件 Comments.add动作,似乎不对;从我读过的,我 应该试图在控制器之间保持1:1的关系 和模特。

作为Web MVC最佳实践,#2是否可以接受?或者我还有另一种选择吗?

2 个答案:

答案 0 :(得分:1)

我经常一起做两件事。我把表单放在视图的帖子中(可能使用了一个元素,如果你想把它放在其他地方),但让它提交给它的控制器的添加动作(在这种情况下是注释)并传递帖子的ID。只需注意 - 如果您需要实现私人帖子等,最好在评论控制器的添加操作中进行检查。

答案 1 :(得分:0)

这两个选项对我来说都很好。

  1. 如果表单太长,只需将其粘贴在局部视图中即可。
  2. 我认为在多个控制器中使用模型没有问题。当然,你不应该在每个控制器中使用每个模型,但如果你需要两个模型,为什么不呢?