2

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

code=-1&tracking=SRG12891283&description=错误&code=0&tracking=SRG19991283&description=标签打印。

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

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

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

IE

代码 = 0 跟踪 = SRG19991283 描述 = 打印标签。

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

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

4

2 回答 2

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) 传递,在这种情况下,您可以检索查询字符串并自己解析它。如果您正在处理用户输入,这可能不合适。

于 2012-11-15T14:43:33.147 回答
0

如果你在参数中使用“类数组”语法,Symfony 应该做你想做的事。

例如,考虑一个查询字符串?code[0]=a&code[1]=b&code[2]=c

$request->query->get('code');在 Symfony 中会返回一个像这样的数组: [ 0 => "a", 1 => "b", 2 => "c", ]

...我认为这是你想要的?(尽管这是一个更简单的例子。)

于 2017-07-10T15:30:43.210 回答