2016-05-27 11 views
0

私はSymfony3でフォームを作成したいと思います。これは、データベース内のテーブル内のすべてのエンティティを表示するテーブルになり、削除ボタンはJavaScriptを使用して行を削除することができます。次に、[適用]ボタンをクリックして、行方不明のエンティティが削除されます。Symfony3エンティティを削除するフォーム

+----+------+--------+ 
| ID | Name | Delete | 
+----+------+--------+ 
| 1 | Foo | X | 
+----+------+--------+ 
| 2 | Bar | X | 
+----+------+--------+ 
| 3 | Plop | X | 
+----+------+--------+ 

+-------+ 
| Apply | 
+-------+ 

私が理解から、CollectionTypeは私がそれを行うことができるでしょう。しかし、私はそれを使用する方法を把握することはできません。正確には、どの時点でエンティティがフォームにリンクされ、フォーム機能を通じて小枝に現れるかわかりません。

ここ

が私のコードです:

コントローラー:

class TurnamentController extends Controller 
{ 
    /** 
    * @Route("/admin/turnament", name="adminTurnament") 
    */ 
    public function indexAction(Request $request) 
    { 
     $em = $this->getDoctrine()->getManager(); 
     $turnaments = $em->getRepository('AppBundle:Turnament')->findAll(); 

     $form = $this->createFormBuilder() 
      ->add('turnaments', CollectionType::class, array(
       'entry_type' => TurnamentType::class, 
       'entry_options' => $turnaments, 
      )) 
      ->add('apply', SubmitType::class, array(
       'label' => 'Appliquer' 
      )) 
      ->getForm(); 

     $form->handleRequest($request); 
     if ($form->isSubmitted()) 
     { 
      //... 
     } 

     return $this->render(
      'admin/turnament.html.twig', 
      array(
       'turnamentsForm' => $form 
      ) 
     ); 
    } 
} 

TurnamentType:

class TurnementType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('delete', SubmitType::class); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\Turnament', 
     )); 
    } 
} 

テンプレート:

{{ form_start(turnamentsForm) }} 
{% for turnament in turnamentsForm.turnaments %} 
    {{ form_widget(turnament.delete) }} 
{% endfor %} 
{{ form_widget(turnamentsForm.apply) }} 
{{ form_end(turnamentsForm) }} 

私はかなり迷ってしまいました、私が試してみましたdump()を使って何が見えるかを調べる行っている。私がentry_optionsで渡した$ turnamentsがTurnamentTypesを生成しないようです...

何か助けてください!

答えて

0

CollectionTypeの 'entry_options'オプションには、入力したentry_typeに直接渡されるオプションがあります。あなたはあなたのトーナメントの選択肢をあなたのTurnamentTypeにオプションとして渡そうとしています。 CollectionTypeは、データが含まれていないフィールドは表示しません。そのため、あなたは、コレクション型のデータとしてトーナメントを設定する必要があります。CollectionTypeは詳細については

$form = $this->createFormBuilder() 
    ->add('turnaments', CollectionType::class, array(
     'entry_type' => TurnamentType::class, 
     'data' => $turnaments, 
    )); 

をリファレンスガイドをチェックアウト:http://symfony.com/doc/current/reference/forms/types/collection.html

とカスタムフォームの種類についていくつかの情報: http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html

関連する問題