2

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のフォームを保護できることを私は知っています。それが私が変更する必要があるデフォルトの構成値であるかどうか疑問に思います。

4

1 に答える 1

1

私自身の質問への回答: フォーム アクション ('/dologin') とルート仕様 ('/dologin/') を末尾のスラッシュに関して対応させる必要がありました。フォームアクションに末尾のスラッシュを追加すると、問題が修正されました。

于 2012-07-17T23:36:23.700 に答える