如何在没有框架的情况下在PHP中将值从控制器传递到视图?

时间:2013-01-26 03:37:59

标签: php model-view-controller

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

背景:

  1. htmlForm1.php - >获取输入并将数据传递给DoWork.php以进行处理
  2. DoWork.php - >做工作并传递给htmlForm2.php来显示
  3. htmlForm2.php - >显示结果
  4. 据我所知,我通过_GET获取DoWork.php中的值(来自htmlForm1.php)。我的问题是如何在htmlForm2.php中获取值(来自DoWork.php)?

    我想过使用会话,但这是唯一的解决方案吗?在htmlForm2.php

    之后,我不要求这些数据是持久的

3 个答案:

答案 0 :(得分:5)

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

MVC

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

但MVC面向Web的方法与常见的MVC方法不同,因为它的 per-request 执行。当谈到Web外的MVC时,视图还有很多其他功能,而不仅仅是检索数据并打印它:视图可以直接连接到模型,在加载后请求数据,还可以在控制器中触发操作(在视图中的特定事件)。 在没有实际加载完整的新请求并获得全新响应的情况下,仅使用HTML几乎无法实现的事情(因此无法使用Javascript,因此无法使用)。截至目前,应用程序的HTML部分仍然是哑模板,因为它被设计为请求的静态输出。

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

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

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

答案 1 :(得分:2)

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

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

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

  

P.S。:视图不是愚蠢的模板。它们是负责应用程序中UI逻辑的类。当在Web上下文中使用MVC时,它们是为用户创建响应的。

  

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

答案 2 :(得分:0)

您的选择归结为会话,http(发布/获取)或数据库。

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

然后在后续页面中,您将基于类似user_id的内容调用模型中的数据,并保存在会话/ cookie中。