我正在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中的表单免受跨站点攻击;我想知道这是否是我需要更改的默认配置值。
答案 0 :(得分:1)
回答我自己的问题:我需要表单操作('/ dologin')和路由规范('/ dologin /')对应的尾部斜杠。向表单操作添加尾部斜杠修复了一些问题。