2013-04-16 7 views
5

私はフィールドの束とHTMLフォームがあるとしましょう。いくつかのフィールドはProductに属し、あるものはOrderに、あるものはOtherに属しています。フォームが提出されると、私はそのリクエストを受け取り、コントローラの製品、注文、その他のためのSymfonyフォームを作成したいと考えています。それから、部分的なフォームデータを取り出し、適切な形式でバインドしたいと思います。例では、このようなものはなりますSymfony2フォームを配列にバインドするにはどうすればいいですか?

$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の束を何とかマージするために必要なすべての複雑さが原因です)。私は基本的なHTMLフォームとSymfonyフォームの機能セットを使用する非常に簡単な方法がほしいだけです。

誰も私にこのことをSymfonyでも可能と言えるのですか?どのようにすればいいですか?

答えて

2

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

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

このよう

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

、あなたが結合するこれらの他のオブジェクトへの関連付けを含むオブジェクトを持っている:あなたは他のフォームを埋め込む形が必要な場合がありますように私は感じ

$pf = $this->createForm(new \MyBundle\Form\ProductType(), $product, array(
    'csrf_protection' => false 
)); 
+0

ありがとう。これは私の問題を解決するのに役立ちます –

0

要求に同様に、1つのオブジェクトを要求にバインドし、単純なゲッターを使用して埋め込みオブジェクトにアクセスするだけで済みます。

十分にクリアですか?

関連する問題