5

たくさんのフィールドを持つ HTML フォームがあるとします。一部のフィールドは製品に属し、一部は注文に属し、一部はその他に属します。フォームが送信されたら、そのリクエストを受け取り、コントローラーで製品、注文、およびその他の Symfony フォームを作成します。次に、部分的なフォーム データを取得し、適切なフォームにバインドします。例は次のようになります。

$productArray = array('name'=>$request->get('name'));
$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product);
$pf->bind($productArray);
if($pf->isValid()) {
  // submit product data
}

// Do same for Order (but use order data)

// Do same for Other (but use other data)

問題は、私がそれをやろうとすると、 $form->isValid() メソッドが機能しないことです。bind() ステップが失敗したようです。フォームトークンに関係があるのではないかと疑っていますが、修正方法がわかりません。繰り返しますが、ビューで独自の HTML フォームを作成します (form_widget() は使用しませんでした。これは、FormTypes の束を何らかの方法で 1 つにマージする必要があるすべての複雑さの原因です)。基本的な HTML フォームを Symfony フォーム機能セットと一緒に使用する非常に簡単な方法が必要です。

Symfonyでもこれが可能であり、どうすればそれを行うことができるか教えてもらえますか?

4

2 に答える 2

2

データを手動でバインドするには、CSRF トークンを無効にする必要があります。

これを行うには、csrf_protectionフォーム オブジェクトの作成時にオプションを渡すことができます。

このような:

$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product, array(
    'csrf_protection' => false
));
于 2013-04-16T19:43:07.077 に答える
0

他のフォームを埋め込むフォームが必要になるかもしれないと思います:

// Main form
$builder
    ->add('product', new ProductType)
    ->add('order', new OrderType);

リクエストにバインドするこれらの他のオブジェクトへの関連付けを含むオブジェクトを持っています。同様に、1 つのオブジェクトをリクエストにバインドし、単純なゲッターを介して埋め込みオブジェクトにアクセスするだけです。

私は十分に明確ですか?

于 2013-08-09T13:30:46.977 に答える