我将以下值发布到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 =标签打印。
我假设这是因为请求类将参数存储在键/值对中,因此后续的参数只是覆盖了之前的参数。
知道如何访问所有这些值吗?
答案 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.)