5

我是 PHP 新手,已经阅读了 MVC。目前,我没有使用任何框架,并且想知道如何将数据从控制器推送到视图。

背景:

  1. htmlForm1.php -> 获取输入并将数据传递给 DoWork.php 进行处理
  2. DoWork.php -> 做工作并传递给 htmlForm2.php 显示
  3. htmlForm2.php -> 显示结果

我了解我通过 _GET 获取 DoWork.php 中的值(来自 htmlForm1.php)。我的问题是如何获取 htmlForm2.php 中的值(来自 DoWork.php)?

我曾想过使用会话,但这是唯一的解决方案吗?我不要求这些数据在 htmlForm2.php 之后持久化

4

3 回答 3

5

从技术上讲,视图可以直接请求模型数据。

MVC

将模型连接到视图的虚线正是这种连接。

但是面向 Web 的 MVC 不同于常见的 MVC 方法,因为它是按请求执行的。在 Web 之外谈论 MVC 时,视图还有很多其他功能,而不仅仅是检索数据并打印它:视图可以直接连接到模型,加载后请求数据,还可以在控制器中触发动作(on视图中的特定事件)。仅使用 HTML 几乎不可能实现的事情(可以关闭 JavaScript,因此无法使用),而无需实际加载完整的新请求并获得完整的新响应。到目前为止,应用程序的 HTML 部分还停留在一个愚蠢的模板上,因为它被设计为请求的静态输出。

大多数 PHP Web 框架都将视图视为模板,我认为(恕我直言)这是这种情况下最好和更清晰的方法。这样,如果您发送视图作为响应,您可以通过简单的方式从控制器向视图发送变量:

$view = new View('view/myView.php');
$view->assign('a' => 'b');

然后在视图类中简单地extract()分配变量数组中的变量,然后包括实际的视图文件。

于 2013-01-26T04:42:45.717 回答
2

控制器应该推送到视图实例的唯一信息是用户输入(即使在极少数情况下也是如此)。

相反,视图应该通过服务从模型层请求信息。控制器主要负责根据用户输入改变模式层的状态。这也应该通过服务来完成。

为此,控制器和视图必须能够访问相同的模型层。ServiceFactory这通常是通过在两种情况下注入某种来完成的。然后工厂确保每个服务只实例化一次,而不会使代码依赖于全局状态。

PS:视图不是愚蠢的模板。它们是负责应用程序中的 UI 逻辑的类。当 MVC 在 Web 环境中使用时,它们会为用户创建响应。

PPS:模型不是类或对象。它是 MVC 中的两个层之一。另一层是表示层,控制器、视图和模板都在其中。模型层主要由三个主要组组成,每个组负责该层的一个特定方面:应用程序逻辑、领域/业务逻辑和存储逻辑。

于 2013-01-26T11:01:57.047 回答
0

您的选择归结为会话、http (post/get) 或数据库。

最常见的是,您的表单会将其数据提交给控制器,控制器将通过其模型运行数据,可能会结束将其保存到表中。

然后在后续页面上,您将根据保存在会话/cookie 中的 user_id 之类的内容从模型中调用数据。

于 2013-01-26T03:51:30.220 回答