如何在PHP中转发(不重定向)请求?

时间:2016-05-30 14:09:29

标签: php model-view-controller request forward

我正在开发一个简单的PHP网站,需要能够将用户发出的请求转发到另一个页面(请注意,我说转发,而不是重定向)。我知道如何通过操纵header变量来重定向,但我不希望这样做,如下所述。

我正在尝试用PHP编写一个非常简单的MVC模式邮件列表应用程序,借鉴我在JSP中的相同知识。我对JSP的看法之一就是你可以转发重定向一个请求。出于我的目的,我需要转发,因为我希望保留请求参数(而重定向将丢弃它们)。

以下是我希望完成的内容的描述:

  • 从表单中检索输入(即/add.php
  • 处理由表单操作(即。/ process.php )调用的页面中的输入,并向请求对象添加成功消息
  • 转发到另一个页面(即.display.php )以在请求对象中显示成功消息

我知道将请求消息传递给显示的唯一方法是将其添加到请求对象,然后从转发的页面访问它。但是,我在转换到另一个页面方面取得成功的唯一方法是使用header方法,该方法删除请求对象(从我可以看出)。我想找到一种方法将转发请求(对象)到新页面,以便我可以从新页面访问请求变量。

实际上在PHP中实际上是这样做的吗? Java的getRequestDispatcher.forward()非常好,但我无法通过搜索找到相应的东西。我已经尝试了几个类似的问题,包括以下内容,但我从来没有真正找到一个问题和答案都是我想要的问题。大多数答案似乎与cURL有关,但我不想实际检索文件,只是转发请求以便从另一个页面访问请求对象。

Does PHP have an equivalent of Java's getRequestDispatcher.forward()?

请告诉我是否应该加入其他内容?

4 个答案:

答案 0 :(得分:1)

我相信你可以用include来做到这一点。在提交表单之前,只需在主页中使用包含:

"dependencies": {
    "immutable": "^3.8.1",
    "react": "15.0.2",
    "react-native": "0.26.2",
    "react-native-app-intro": "^1.0.2",
    "react-native-button": "^1.6.0",
    "react-native-drawer": "^2.2.2",
    "react-native-fetch-blob": "^0.4.2",
    "react-native-fs": "^1.4.0",
    "react-native-i18n": "0.0.8",
    "react-native-navbar": "^1.5.0",
    "react-native-router-flux": "^3.22.23",
    "react-native-router-redux": "^0.2.2",
    "react-native-search-bar": "^2.11.0",
    "react-native-side-menu": "^0.19.0",
    "react-native-simple-store": "^1.0.1",
    "react-native-sound": "^0.8.3",
    "react-native-sqlite-storage": "^2.1.6",
    "react-native-swiper": "^1.4.4",
    "react-native-vector-icons": "^2.0.2",
    "react-redux": "^4.4.5",
    "redux": "^3.5.2",
    "redux-logger": "^2.6.1",
    "redux-saga": "^0.10.4",
    "redux-thunk": "^2.1.0",
    "rnpm": "^1.7.0"
}

处理完信息后,以相同的方式包含display.php;使用它,display.php将使用标题中的相同参数,因为它包含在同一主页中。

简要说明:add.php,process.php和display.php将是母版页的模块,但是加载了不同的表单处理状态。

希望它有所帮助!

答案 1 :(得分:0)

使用curl用不同的方法get,post。它会发送请求并回复回复。

答案 2 :(得分:0)

我看到的将消息从一个页面传递给最终用户的最常见方法称为会话闪烁。

这是在会话中临时存储变量,直到读取它为止。

假设您已经在使用会话:

在process.php上:

$_SESSION['message'] = 'Your data has been saved!';

在display.php上:

if (isset($_SESSION['message'])) {
    echo $_SESSION['message'];
    unset($_SESSION['message']);
}

您还可以在会话中存储整个Request对象。

答案 3 :(得分:0)

因此,如果我知道,PHP在这种情况下只提供基本的工具集。并且最初在HTTP中没有像“前进”那样的东西。它只是框架的抽象/想法。有两种方法可以实现这一点:从请求中复制所有参数并执行新的真实HTTP请求(使用重定向)或内部转发:因此框架将创建虚假请求并调用另一个控制器和操作,而不会发出新的物理HTTP请求。

相关问题