2

次の値をSymfony2のWebページに投稿しています。

code = -1&tracking = SRG12891283&description = Error&code = 0&tracking = SRG19991283&description=ラベルが印刷されました。

重複に注意してください-コード/追跡/説明の「ペア」はいくつあってもかまいません。

Symfonyでは、次のことを行うと、最後の値のセットのみが出力されます。

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

すなわち

コード=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 に答える