Динамически добавлять поля в CollectionType

Я должен создать директора школы. Когда учитель должен представить результаты оценки, он должен оценить данные навыки по балльной оценке.

Evaluation ——Один ко многим—— Scale —— —— ManyToOne Skill

EvaluationType

class EvaluationType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('scales', CollectionType::class, [
'entry_type' => ScaleType::class
]);
}
}

ScaleType

class ScaleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('value');
}
}

Хочу динамически добавить ScaleType дети в EvaluationType::scales сформировать ребенка для данной коллекции Skills.

Вот что я пробовал до сих пор в своем действии контроллера:

public function newEvaluation(Classroom $classroom, Subject $subject, Period $period)
{
$evaluation = new Evaluation();
$evaluation->setClassroom($classroom);
$evaluation->setSubject($subject);
$evaluation->setPeriod($period);

$form = $this->createForm(EvaluationType::class, $evaluation);
$skills =$this->getDoctrine()->getRepository('AppBundle:Skill')->findAll();
foreach($skills as $skill) {
$scale = new Scale();
$scale->setEvaluation($evaluation);
$scale->setSkill($skill);
$form['scales']->add($this->createForm(ScaleType::class, $scale, [
'auto_initialize' => false
]));
}

return $this->render('classrooms/newEvaluation.html.twig', [
'form' => $form->createView(),
'classroom' => $classroom,
'subject' => $subject
]);
}

Проблема в том, что я получаю только одну подформу в scales поле при рендеринге, похоже, когда я добавляю детей в $form['scales'] это переписывает предыдущих детей.

Я полагаю, я делаю это совершенно неправильно. Как я могу этого достичь?

Я также указываю на тот факт, что я не могу создать Evaluation сначала, а затем на другой странице создайте все Scales. Это должно быть сделано в том же контроллере / странице.

редактироватьЯ добавлю тот факт, что я не хочу детей scales чтобы быть расширяемыми, они должны быть исправлены сервером, а не извлечены клиентом.

0

Решение

Решил это, благодаря Artamiel, вот мое новое действие контроллера:

public function newEvaluation(Classroom $classroom, Subject $subject, Period $period)
{
$evaluation = new Evaluation();
$evaluation->setClassroom($classroom);
$evaluation->setSubject($subject);
$evaluation->setPeriod($period);

$skills = $this->getDoctrine()->getRepository('AppBundle:Skill')->findAll();
foreach ($skills as $skill) {
$scale = new Scale();
$scale->setSkill($skill);
$scale->setEvaluation($evaluation);
}

$form = $this->createForm(EvaluationType::class, $evaluation);

return $this->render('classrooms/newEvaluation.html.twig', [
'form' => $form->createView(),
'classroom' => $classroom,
'subject' => $subject
]);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]