基本CakePHP体系结构:在一个视图中访问多个控制器/模型

基本CakePHP体系结构:在一个视图中访问多个控制器/模型,php,cakephp,architecture,cakephp-2.0,Php,Cakephp,Architecture,Cakephp 2.0,我最近开始使用CakePHP,虽然这本烹饪书不是一本糟糕的资源,但它并没有真正回答我的基本问题 默认情况下,CakePHP的体系结构似乎认为在一个模型的控制器中,一个动作对应一个视图。但是,假设我有一个典型的博客应用程序,其中从用户角度来看的常见视图包括: 已发布的文章(模型文章的action view()) 用于为该文章编写注释的小部件(模型注释的action add()) 其他用户的注释列表(模型注释的操作索引()) 这是一个非常常见的用例,但目前我还不能真正掌握CakePHP解决它的“

我最近开始使用CakePHP,虽然这本烹饪书不是一本糟糕的资源,但它并没有真正回答我的基本问题

默认情况下,CakePHP的体系结构似乎认为在一个模型的控制器中,一个动作对应一个视图。但是,假设我有一个典型的博客应用程序,其中从用户角度来看的常见视图包括:

  • 已发布的文章(模型文章的action view())
  • 用于为该文章编写注释的小部件(模型注释的action add())
  • 其他用户的注释列表(模型注释的操作索引())
这是一个非常常见的用例,但目前我还不能真正掌握CakePHP解决它的“预期”方法。我在想:

  • 在上面的用例中有一个控制器,用于处理多个模型
  • 每个模型有一个控制器,但有一个视图包含连接到不同控制器的某种子视图
对我来说,后者似乎是更干净的方法,因为它允许重用子视图并避免控制器中的代码重复,但从我所读到的内容来看,我不确定CakePHP是否真的可以做到这一点。任何建议都将不胜感激

这是一个非常常见的用例,但目前我还不能真正掌握CakePHP解决它的“预期”方法

这不是CakePHP特有的,但在任何MVC框架中都可能会遇到同样的“问题”。这一切都是关于正当的

每个模型有一个控制器,但有一个视图包含连接到不同控制器的某种子视图

很接近

通常,您会在页面的操作中获得页面需要显示的所有数据。注意:这并不意味着用数百行代码膨胀控制器。你可以通过文章协会获取评论,因为一篇文章有很多评论——这就是你的协会

您也可以使用来显示内容。如果可能的话,我个人更愿意在不使用手机的情况下获取所有数据。但我认为这是品味的问题

注释表单将向注释控制器发送一条帖子,添加操作并重定向回使用的来源

您可以编写一个用作代理的组件,并将addComment和editComment“方法”透明地添加到控制器中,以便于重用并避免代码重复。我不打算在这里描述做这件事的整个方法,它只是太长了,但我想你明白了


对于评论,我个人最喜欢的是一个带有RESTful API和基于JS的前端小部件的评论CakePHP插件。基本上是流行的Discus小部件的简约复制品。只需将小部件放入您的页面,并以最可重用的方式在任何页面上立即获得评论即可。:)

你提出了一些很好的观点。我使用的是CakePHP 2.x,所以视图单元格似乎对我不可用,这意味着我必须使用元素和requestAction()。我个人不喜欢根据视图调整控制器,因为我觉得这破坏了我们首先使用MVC的原因。我会把这个问题再留一点时间,也许对这个话题还有其他看法。