在Symfony2中访问具有相同名称的多个请求参数

时间:2012-11-15 13:37:40

标签: post symfony request

我将以下值发布到Symfony2网页:

  

code = -1& tracking = SRG12891283& description = Error& code = 0& tracking = SRG19991283& description = Label Printed。

请注意重复项 - 可能有任意数量的代码/跟踪/描述'对'。

在Symfony中,当我执行以下操作时,它只输出最后一组值:

foreach($request->request->all() as $key => $val){
    $this->m_logger->debug($key . ' - ' .$val);
}

  

代码= 0   tracking = SRG19991283   desription =标签打印。

我假设这是因为请求类将参数存储在键/值对中,因此后续的参数只是覆盖了之前的参数。

知道如何访问所有这些值吗?

2 个答案:

答案 0 :(得分:1)

$ _REQUEST,$ _POST和$ _GET数组中的PHP将使用变量的最后一个定义覆盖重复的变量名。结果,Symfony2表现出相同的行为。

例如给出代码。

<?php
echo "<pre>";
var_dump($_GET);
var_dump($_POST);
var_dump($_REQUEST);
echo "</pre>";
?>
<form method="post">

<input type="text" name="test1" value="1"/>
<input type="text" name="test2" value="2"/>
<input type="text" name="test2" value="3"/>
<input type="submit"/>
</form>

提交表单后,输出

array(0) {
}
array(2) {
  ["test1"]=>
  string(1) "1"
  ["test2"]=>
  string(1) "3"
}
array(2) {
  ["test1"]=>
  string(1) "1"
  ["test2"]=>
  string(1) "3"
}

使用查询字符串?test1=1&test2=2&test2=3调用页面结果为:

array(2) {
  ["test1"]=>
  string(1) "1"
  ["test2"]=>
  string(1) "3"
}
array(0) {
}
array(2) {
  ["test1"]=>
  string(1) "1"
  ["test2"]=>
  string(1) "3"
}

自己解决此问题的唯一方法是将变量作为查询字符串(GET)传递,在这种情况下,您可以检索查询字符串并自行解析。如果您正在处理用户输入,这可能不合适。

答案 1 :(得分:0)

If you use "array-like" syntax in your parameters, Symfony should do what you want.

For example, consider a querystring of ?code[0]=a&code[1]=b&code[2]=c.

$request->query->get('code'); in Symfony would return an array like this: [ 0 => "a", 1 => "b", 2 => "c", ]

... which I think is what you want? (Albeit this is a simpler example.)