8

formBuilderSymfonyを使用してフォームを作成しました。外部スタイルシートを使用し、タグ ID を参照して、フォーム入力にいくつかの基本的なスタイルを追加します。フォームが正しく表示され、情報が正しく処理されます。

ただし、次のテキストを含むリスト項目を含む不要な順序付けられていないリストを出力します。This form should not contain extra fields.

私はこの通知を取り除くのに本当に苦労しています。なぜそれが私のフォームでレンダリングされているのか、そしてそれを削除する方法を誰かが理解するのを手伝ってくれるかどうか疑問に思っていましたか?

よろしくお願いします!

コントローラ

$form = $this->createFormBuilder($search)
        ->add('searchinput', 'text', array('label'=>false, 'required' =>false))
        ->add('search', 'submit')
        ->getForm();

$form->handleRequest($request);

Twig 出力 (フォームが出力され、正しく処理されます)

This form should not contain extra fields.

レンダリングされた HTML

<form method="post" action="">
    <div id="form">
       <ul>
           <li>This form should not contain extra fields.</li>
       </ul>
       <div>
          <input type="text" id="form_searchinput" name="form[searchinput]" />
       </div>
       <div>
          <button type="submit" id="form_search" name="form[search]">Search</button>
       </div>
       <input type="hidden" id="form__token" name="form[_token]" value="bb342d7ef928e984713d8cf3eda9a63440f973f2" />
    </div>
 </form>
4

5 に答える 5

9

トークンフィールドが原因で問題が発生しているようです。その場合は、createFormBuilder() にオプションを追加してみてください。

$this->createFormBuilder($search, array(
        'csrf_protection' => true,
        'csrf_field_name' => '_token',
    ))
    ->add('searchinput', 'text', array('label'=>false, 'required' =>false))
    ->add('search', 'submit')
    ->getForm();

追加のフィールドを見つけるには、リクエストを取得するコントローラーで次のコードを使用します。

$data = $request->request->all();

print("REQUEST DATA<br/>");
foreach ($data as $k => $d) {
    print("$k: <pre>"); print_r($d); print("</pre>");
}

$children = $form->all();

print("<br/>FORM CHILDREN<br/>");
foreach ($children as $ch) {
    print($ch->getName() . "<br/>");
}

$data = array_diff_key($data, $children);
//$data contains now extra fields

print("<br/>DIFF DATA<br/>");
foreach ($data as $k => $d) {
    print("$k: <pre>"); print_r($d); print("</pre>");
}

$form->bind($data);
于 2013-10-06T15:46:33.740 に答える
4

このメッセージは、createFormBuilder() でフィールドを追加/変更し、ブラウザで更新を押した場合にも発生する可能性があります...

この場合、フォームを再度送信すれば問題ありません ;-)

于 2014-02-27T19:28:10.003 に答える
0

マルチステップ フォームを作成しているときに、このエラーが発生しました。

ステップ 1 のフォームが送信されると、$request->request に acme_mybundle_myform 配列が含まれます。これにより、検証エラーが発生し、back、forward、および form フィールドが正しく入力されなくなりました。「this-form-should-not-contain-extra-fields」は言うまでもありません

nni6 のコードのおかげでこれを発見しました。

私の場合の解決策はコントローラー内にありました:

if ($form->isValid())
{
    if($form->has('nextStep') && $form->get('nextStep')->isClicked())
    {
        $session->getFlashBag()->set('notice', 'Next clicked');

        $registerType->incrementStep();

        $request->request->remove('acme_mybundle_myform');

        return $this->forward("AcmeMyBundle:Default:register", array($request));

    }
....
}
于 2014-05-16T21:51:29.597 に答える