私は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を生成しないようです...
何か助けてください!