2012-04-02 24 views
0

フォームが送信され、再度表示された後、リクエストはフォームにバインドされ、選択された値が表示されます。私はフォームが以前に提出されていない場合は、外部配列(私の場合はセッション)からのデータでフォームを水和したい。フォームは配列型で、エンティティには接続されていません.dbフィルタとして機能します。Symfony2:拡張された複数の選択フィールドの値を設定する(チェックボックス)

私は選択肢のフォームフィールドが拡大している、以下のように構成された複数の(チェックボックス):

$categoryForm = array(); 
    $form = $this->createFormBuilder($categoryForm) 
       ->add('id', 'choice', array('choices' => $arrayOfChoices, 
               'multiple' => true, 
               'expanded' => true)) 
       ->getForm(); 
    if ($request->getMethod() == 'POST') { 
     $form->bindRequest($request); 
    } 

答えて

0

それは簡単なケースではありませんが、思考の時間後に私はそれを行うことができました。以下は、セッションとフォームの間でデータを移動するのに効果的な鉱山コードを示しています。

//bind filters from session to form 
    $sessionFilter = $session->get('filter'); 
    if (!is_null($sessionFilter)) { 
     $form->bind($sessionFilter); 
    } 

    if ($request->getMethod() == 'POST') { 
     $form->bindRequest($request); 
     $formData = $form->getData(); 

     if (count($formData) > 0) { 
      foreach ($formData as $fdkey => $data) { 
       if ($fdkey == 'id' OR $fdkey == 'morezero') { 
        foreach ($data as $value) { 
         $sessionData[$fdkey][$value] = $value ; 
        } 
       } 
      } 
      $session->set('filter', $sessionData); 
     } 
    } 
0

あなたは(のcontrolerに)フォームに変数を渡し、その後、ビルダークラスで渡された変数を使用する必要があります。

+0

もっと正確になるのですか?それをどこに渡す? $ categoryFormに?またはsetData()メソッドを使用していますか?どのようにデータが選択肢の配列である場合setData()? – nysander

関連する問題