基本 CakePHP 架构:在一个视图中访问多个控制器/模型
Basic CakePHP architecture: Accessing multiple controllers / models in one view
我最近开始使用 CakePHP,虽然这本食谱是不错的资源,但它并没有真正回答我非常基本的问题。
默认情况下,CakePHP 的体系结构似乎认为您有一个视图用于一个模型的控制器中的一项操作。但是假设我有一个典型的博客应用程序,其中从用户的角度来看,一个常见的视图包括:
- 发表的文章(模型文章的action view())
- 为该文章写评论的小部件(模型评论的操作 add())
- 其他用户的评论列表(action index() for model Comment)
这是一个非常常见的用例,但目前我无法真正理解 CakePHP 的 "intended" 解决它的方法。我在想:
- 上面的用例有一个控制器,它处理多个模型。
- 每个模型有一个控制器,但有一个视图包含连接到不同控制器的某种子视图
后者对我来说似乎是更简洁的方法,因为它允许重用子视图并避免控制器中的代码重复,但从我读过的内容来看,我不确定 CakePHP 是否可以实际上这样做。任何建议表示赞赏。
This is a very common use-case, but currently I can't really grasp what's CakePHP's "intended" way of solving it.
这不是 CakePHP 特有的,但您可能在任何 MVC 框架中都有相同类型的 "problem"。一切都是关于适当的 SoC.
Having one Controller per Model, but having one View containing some kind of sub-views which are connected to different Controllers
差不多了。
通常您会在该页面的操作中获得该页面需要显示的所有数据。注意:这并不意味着用数百行代码来膨胀控制器。你可以通过文章关联获取评论,因为一篇文章有很多评论——那是你的关联。
您也可以使用 view cells 来显示内容。如果可能的话,我个人更愿意尝试在不使用单元格的情况下获取所有数据。但我认为这是一个品味问题。
评论表单会对评论控制器执行 post 添加操作并重定向回使用来源。
您可以编写一个组件作为代理并透明地向您的控制器添加 addComment 和 editComment "method" 以使其易于重用并避免代码重复。我不打算在这里描述整个过程,它太长了,但我想你明白了。
在评论方面,我个人最喜欢的是带有 RESTful API 和基于 JS 的前端小部件的评论 CakePHP 插件。基本上是流行的 Disqus 小部件的简约克隆。只需将小部件放入您的页面,评论就会以最可重用的方式立即在任何页面上运行。 :)
我最近开始使用 CakePHP,虽然这本食谱是不错的资源,但它并没有真正回答我非常基本的问题。
默认情况下,CakePHP 的体系结构似乎认为您有一个视图用于一个模型的控制器中的一项操作。但是假设我有一个典型的博客应用程序,其中从用户的角度来看,一个常见的视图包括:
- 发表的文章(模型文章的action view())
- 为该文章写评论的小部件(模型评论的操作 add())
- 其他用户的评论列表(action index() for model Comment)
这是一个非常常见的用例,但目前我无法真正理解 CakePHP 的 "intended" 解决它的方法。我在想:
- 上面的用例有一个控制器,它处理多个模型。
- 每个模型有一个控制器,但有一个视图包含连接到不同控制器的某种子视图
后者对我来说似乎是更简洁的方法,因为它允许重用子视图并避免控制器中的代码重复,但从我读过的内容来看,我不确定 CakePHP 是否可以实际上这样做。任何建议表示赞赏。
This is a very common use-case, but currently I can't really grasp what's CakePHP's "intended" way of solving it.
这不是 CakePHP 特有的,但您可能在任何 MVC 框架中都有相同类型的 "problem"。一切都是关于适当的 SoC.
Having one Controller per Model, but having one View containing some kind of sub-views which are connected to different Controllers
差不多了。
通常您会在该页面的操作中获得该页面需要显示的所有数据。注意:这并不意味着用数百行代码来膨胀控制器。你可以通过文章关联获取评论,因为一篇文章有很多评论——那是你的关联。
您也可以使用 view cells 来显示内容。如果可能的话,我个人更愿意尝试在不使用单元格的情况下获取所有数据。但我认为这是一个品味问题。
评论表单会对评论控制器执行 post 添加操作并重定向回使用来源。
您可以编写一个组件作为代理并透明地向您的控制器添加 addComment 和 editComment "method" 以使其易于重用并避免代码重复。我不打算在这里描述整个过程,它太长了,但我想你明白了。
在评论方面,我个人最喜欢的是带有 RESTful API 和基于 JS 的前端小部件的评论 CakePHP 插件。基本上是流行的 Disqus 小部件的简约克隆。只需将小部件放入您的页面,评论就会以最可重用的方式立即在任何页面上运行。 :)