レッスンと評価の 2 つのモデルがあります。各レッスンは複数の評価を持つことができます。
ユーザーがこのすべてのデータを同時に入力できるようにする埋め込みフォームを設定しようとしています。
データの追加と編集には問題なく機能しますが、評価を削除しようとすると問題が発生します。
たとえば、3 つの評価が添付されたレッスンがあります。次に、フォームをもう一度送信しますが、そのうちの 1 つを削除します。
コントローラーでは、最初に編集中のレッスンを取得し、次にその評価を取得してループし、ID を出力します。期待どおりに 3 つの ID が出力されます。
次に、リクエストをフォームにバインドし、有効かどうかを確認します。次に、評価を再度取得し、それらをもう一度ループして、それらが削除されたことを確認しますが、3 つの ID はすべてまだそこにありました!
生の POST データを印刷すると、2 つしかありません。
誰かが私が間違ったことを見ることができますか?
これが私のコントローラーコードです:
public function editAction($id = NULL)
{
$lesson = new Lesson;
if ( ! empty($id))
{
$lesson = $this->getDoctrine()
->getRepository('LessonBundle:Lesson')
->find($id);
}
foreach ($lesson->getEvaluations() as $evaluation)
{
print_r($evaluation->getId());
print_r('<br />');
}
$form = $this->createForm(new LessonType(), $lesson);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
foreach ($lesson->getEvaluations() as $evaluation)
{
print_r($evaluation->getId());
print_r('<br />');
}
die();
$em = $this->getDoctrine()->getEntityManager();
$em->persist($lesson);
$em->flush();
}
}
}
これが私のレッスンフォームです:
class LessonType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('evaluations', 'collection', array(
'type' => new EvaluationType(),
'allow_add' => true,
'by_reference' => false,
'allow_delete' => true,
));
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'LessonBundle\Entity\Lesson',
);
}
public function getName()
{
return 'Lesson';
}
}
そして最後に、私の評価フォーム:
class EvaluationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('report');
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'LessonBundle\Entity\Evaluation',
);
}
public function getName()
{
return 'Evaluation';
}
}
アドバイスをいただければ幸いです。
ありがとう。