【问题标题】:If I use GET with a Front Controller, does this mean I must use GET for all forms?如果我将 GET 与 Front Controller 一起使用,这是否意味着我必须对所有表单使用 GET?
【发布时间】:2014-10-17 17:21:45
【问题描述】:

我有一个前端控制器类。在那个类中,我有解析 url 的函数:

public function parseURL()
{
    if(isset($_GET['url']))
    {
        return $url = explode('/',filter_var(rtrim($_GET['url'],'/'),FILTER_SANITIZE_URL));
    }

}

这是基于 RewriteRule(我还是导入到 IIS 中的):

Options -Multiviews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

这是否意味着我的所有表单现在都需要使用 GET?

<form action="/controller/action" method="GET">

不是所有东西都通过前端控制器,甚至我的 CRUD 吗?

例如/controller/action/id

如果重要的话,我正在使用 IIS。我没有任何用于放置、删除等的隐藏输入。我目前没有使用 AJAX。

【问题讨论】:

  • GET 只是意味着所有相关信息都在 url 中传递。您仍然可以将查询参数(也称为 GET 数据)与其他 http 动词一起使用,例如发布。
  • 但是如果我沿着这条路开始,这是否意味着我需要在这个应用程序中“永远”使用 GET。 POST 不应该“更好”吗?

标签: php mod-rewrite url-routing


【解决方案1】:

不,您的表单仍然可以使用 POST。我建议您在提交表单值时不要使用 GET,因为您将使用表单数据污染您的 URL。

您也可以很好地访问您的 GET 属性。

<form action="/controller/action/id" method="POST">
    <input type="text" name="someText" />
    <input type="submit />
</form>

在 PHP 中,你照常做事:

echo $_POST['someText']; //echos the input from the form control
echo $_GET['url']; //echos "/controller/action/id"

【讨论】:

  • 但是我的解析器呢?它使用 GET(见上文)。不知道你告诉我如何处理这里的 POST,因为它与我解析传入的数据集有关。
  • 没错。但是 PHP 仍然会将action 属性的内容放在$_GET 数组中,而您的表单输入将放在$_POST 数组中。 HTTP 方法仍将注册为已通过POST 发生,但这不会阻止 PHP 将 POST/GET 数据放置在适当的位置。试一试,你会看到它的作用。 :)
猜你喜欢
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多