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

时间:2016-03-30 11:08:26

标签: php cakephp architecture cakephp-2.0

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

默认情况下,CakePHP的架构似乎认为您在一个模型的Controller中为一个操作获得了一个视图。但是假设我有一个典型的博客应用程序,从用户的角度来看共同观点包括:

  • 已发表的文章(模型文章的行动视图())
  • 为该文章撰写评论的小部件(模型评论的动作add())
  • 其他用户的评论列表(模型评论的操作索引())

这是一个非常常见的用例,但目前我无法真正掌握CakePHP"""""""解决它的方法。我在想:

  • 上面有一个用例,用于处理多个模型。
  • 每个模型有一个控制器,但有一个视图包含连接到不同控制器的某种子视图

后者似乎对我来说更干净,因为它可以重用子视图并避免控制器中的代码重复,但是从我读过的内容来看,我不确定是否CakePHP实际上可以做到这一点。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

  

这是一个非常常见的用例,但目前我无法真正理解CakePHP的“预期”解决方法。

这不是CakePHP特有的,但你可能在任何MVC框架中都有同样的“问题”。这完全是关于正确的SoC

  

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

那很接近。

通常,您可以获取该页面操作中页面所需的所有数据。注意:这并不意味着用数百行代码使控制器膨胀。您可以通过文章关联来获取评论,因为一篇文章有​​很多评论 - 这是您的关联。

您也可以使用view cells来显示内容。我个人更愿意尝试在不使用单元格的情况下获取所有数据。但我认为这是一个品味问题。

评论表格会在评论控制器上添加操作并重定向回用户来源。

您可以编写一个充当代理的组件,并向控制器透明地添加addComment和editComment“方法”,以便于重用并避免代码重复。我不会在这里描述完成它的整个方式,它只是很长,但我想你明白了。

我个人最喜欢的评论是CakePHP插件,用于评论RESTful API和基于JS的前端小部件。基本上是流行的Disqus小部件的简约克隆。只需将窗口小部件放入您的页面,即可以最可重复使用的方式立即在任何页面上使用注释。 :)