【问题标题】:Symfony2 - Form method switching from POST to GET?Symfony2 - 表单方法从 POST 切换到 GET?
【发布时间】:2012-07-17 14:34:26
【问题描述】:

我在 Symfony2 中手动构建了一个登录表单(不使用表单构建器),由于某种原因,POST 方法被忽略了;目标页面看到一个 GET 请求,所以我无权访问发布的字段值。

这是表格:

<form action="/mysite/web/dologin" method="POST">
   Email: <input name=email type=text size=40>
   Password: <input name=password type=password size=40>
   <input type=submit>
</form>

还有 routing.yml 条目:

dologin: 
    pattern:  /dologin/
    defaults: { _controller: SiteDefaultBundle:Default:dologin }

以及控制器动作:

public function dologinAction()
{
        $request = $this->getRequest();
        var_dump($request);
}

我提交的表单在两个字段中都有值,但没有值通过。生成的请求转储的相关部分如下所示;注意“请求”中没有字段:

  ["request"]=>
  object(Symfony\Component\HttpFoundation\ParameterBag)#8 (1) {
    ["parameters":protected]=>
    array(0) {
    }
  }
  ["query"]=>
  object(Symfony\Component\HttpFoundation\ParameterBag)#9 (1) {
    ["parameters":protected]=>
    array(0) {
    }
  }
  ...
  ["REQUEST_METHOD"]=>
  string(3) "GET"

如果我在 HTML 表单中将方法更改为“GET”,识别的 request_method 仍然是 GET,但表单值现在可用:

  ["request"]=>
  object(Symfony\Component\HttpFoundation\ParameterBag)#8 (1) {
    ["parameters":protected]=>
    array(0) {
    }
  }
  ["query"]=>
  object(Symfony\Component\HttpFoundation\ParameterBag)#9 (1) {
    ["parameters":protected]=>
    array(2) {
      ["email"]=>
      string(13) "test@test.com"
      ["password"]=>
      string(4) "mypw"
    }
  }

为什么会这样?为什么 POST 被忽略?我需要指定编码类型吗?我知道您可以保护 Symfony 中的表单免受跨站点攻击;我想知道这是否是我需要更改的默认配置值。

【问题讨论】:

  • 你检查过程中没有重定向吗?

标签: forms symfony


【解决方案1】:

回答我自己的问题:我需要让表单操作 ('/dologin') 和路由规范 ('/dologin/') 与尾部斜杠相对应。向表单操作添加尾部斜杠可修复问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2013-11-10
    • 2013-11-06
    相关资源
    最近更新 更多