在 PHP MVC 中创建子视图

Posted

技术标签:

【中文标题】在 PHP MVC 中创建子视图【英文标题】:Creating a subview in PHP MVC 【发布时间】:2012-04-27 00:51:37 【问题描述】:

我最近浏览了一些关于如何编写自己的 php MVC 框架的教程。为了避免一些问题和 cmets:我不想在生产环境中使用它,我只是喜欢摆弄并了解 MVC 中发生了什么。

到目前为止,我可以拥有单页,例如。 http://domain/news/show/3 向我展示了数据库中 id 为 3 的新闻记录,http://domain/news/all 在一页上将它们全部列出。

现在我有多个实体和多个列表,并希望它们都出现在一个页面上。最好是打开时看到的页面http://domain/

我是否必须编写一个新模型和控制器来调用其他模型?我有点不确定如何实现这一目标。

【问题讨论】:

【参考方案1】:

据我所知,对此没有严格的定义或约定。

我会这样做:

类概述

Controller_Homepage Controller_News Model_NewsArticle

行为

Controller_Homepage

Action_Index 获取多个Model_NewsArticle 实体,渲染它们,并将输出传递给查看。还可以获取您可能需要的任何其他实体并将其渲染输出提供给查看。

Controller_News

Action_List 获取多个 Model_NewsArticle 实体,对其进行渲染,然后将输出传递给查看。 Action_View 调用Model_NewsArticle::factory($id),对其进行渲染,并将输出传递给视图。

Model_NewsArticle

包含一个接受$id 的静态factory 方法。返回Model_NewsArticle 的实例。 包含用于查找多篇文章的方法。一个查询构建器在这里会很好。

这绝不是全面的,我遗漏了很多小细节,但它相当简单而且相当枯燥。

【讨论】:

【参考方案2】:

这确实是一个偏好问题。拥有另一个控制器和模型使大型项目中的代码分离更容易。就个人而言,我只会制作一个新的控制器,因为它是一个不同的页面,可能有不同的操作,我会使用现有的模型来获取数据以保持你的代码干燥(不要重复你自己)。

【讨论】:

以上是关于在 PHP MVC 中创建子视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SKScene 中创建子视图?

如何在视图 SQL 的全选 (*) 中创建子查询?

在视图 SQL-ORACLE 中创建子查询

视图中的 PHP MVC 循环

如何在android的导航菜单中创建子级别?

如何在 MVC 中创建共享视图