У меня проблема с зацикливанием формы в Symfony с использованием цикла while. Когда пользователь вводит один студенческий период и соответствует регистрации, подтвердите форму, чтобы он мог ввести второй студенческий период, а затем третий. Я делаю это неправильно или могу повторить entity = new Student (); чтобы позволить им войти в две сущности.
public function createAction(Request $request){
$entity = new Student();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$student = $em->getRepository('AcmeDemoBundle:Payrollperiod')
->findOneBy([
'begindate'=>$form->get('beginDate')->getData(),
'lastdate'=>$form->get('lastDate')->getData()
]);
$registration = $em->getRepository('AcmeDemoBundle:Payrollweek')
->findBystartdateAndenddate(
$form->get('beginDate')->getData(),
$form->get('lastDate')->getData()
);
$counter = count($registration);
while($counter<=2) {
if ($student){
$this->addFlash('error', 'Duplicate error: Student Period already existed.' );
return $this->redirect($this->generateUrl('student'));
}
elseif ($registration){
foreach ($registration as $reg) {
$reg->setStudentid($entity);
}
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('payrollperiod'));
}
else{
$this->addFlash('error', ' does not match .');
return $this->redirect($this->generateUrl('student'));
}
}
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
}
Прочитайте документацию здесь http://symfony.com/doc/current/reference/forms/types/form.html#allow-extra-fields при добавлении полей. Ваш пользовательский интерфейс / интерфейс должен создавать больше полей, когда пользователю нужно добавить секунду или более периодов. Я должен сгенерировать правильные элементы формы Symfony, а затем, когда вы отправляете сообщение, вы можете обрабатывать его как стандартную форму, повторяя запрос, так как периоды будут представлены в виде массива.
Я делал что-то подобное в прошлом, и я добавил новую строку формы для вызова AJAX в шаблон, описывающий поля ввода формы, поэтому мне не приходилось создавать HTML-форму в Javascript / jQuery. .append()
результаты шаблона к форме — отправьте и обработайте запрос.
Других решений пока нет …