Я должен создать директора школы. Когда учитель должен представить результаты оценки, он должен оценить данные навыки по балльной оценке.
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
сформировать ребенка для данной коллекции Skill
s.
Вот что я пробовал до сих пор в своем действии контроллера:
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
сначала, а затем на другой странице создайте все Scale
s. Это должно быть сделано в том же контроллере / странице.
редактироватьЯ добавлю тот факт, что я не хочу детей scales
чтобы быть расширяемыми, они должны быть исправлены сервером, а не извлечены клиентом.
Решил это, благодаря 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
]);
}
Других решений пока нет …