У меня есть форма для добавления нового врача в мою базу данных. Первый шаг состоит в информировании различной информации о назначающем враче.
Затем я проверяю, есть ли похожие прописывающие, прежде чем добавить его (2-й шаг со 2-й формой), и если есть, я прошу пользователя подтвердить.
Короче говоря, у меня есть форма с одним или двумя шагами, в зависимости от дубликатов.
Я пытался использовать CraueFormFlowBundle, но не знаю, как реализовать мой условный второй шаг. Мои тесты были безрезультатными. Поэтому я решил использовать прямой метод в своем контроллере, и мне это нравится!
Но у меня не получается сбросить прописку в конце 2-го шага (после переадресации), у меня такая ошибка: Unable to guess how to get a Doctrine instance from the request information for parameter "prescriber".
добавить действие (= шаг 1)
/**
* Add a new prescriber
*
* @Route("/prescribers/add", name="prescriber_add")
*/
public function addAction(Request $request) {
$em = $this->getDoctrine()->getManager();
$rp = $em->getRepository('AppBundle:Prescriber');
$p = new Prescriber();
// build the form
$form = $this->createForm(AddPrescriberType::class, $p);
// handle the submit
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
# search if a prescriber already exists
$qb = $rp->createQueryBuilder('p');
$qb->where($qb->expr()->eq('p.rpps', ':rpps'))
->orWhere($qb->expr()->andX(
$qb->expr()->like('p.lastname', ':name'),
$qb->expr()->like('p.firstname', ':firstname')
))
->setParameter('rpps', $p->getRpps())
->setParameter('name', '%'.$p->getLastname().'%')
->setParameter('firstname', '%'.$p->getFirstname().'%');
$duplicates = $qb->getQuery()->getArrayResult();
# there are duplicates
if (!empty($duplicates)) {
$em->persist($p);
// confirm the addition of the new prescriber
$params = array('prescriber' => $p, 'duplicates' => $duplicates);
$query = $request->query->all();
return $this->forward('AppBundle:Prescriber:addConfirm', $params, $query);
} else {
$em->persist($p); # save the prescriber
$em->flush(); # update database
$this->addFlash('p_success', 'The prescriber has been created successfully');
return $this->redirectToRoute('prescriber');
}
}
// show form
return $this->render('prescribers/form-step1.html.twig', array(
'form' => $form->createView()
));
}
addConfirmAction (= шаг 2)
/**
* Confirm addition of a new prescriber
*
* @Route("/prescribers/add/confirm", name="prescriber_add_confirm")
*/
public function addConfirmAction(Prescriber $prescriber, $duplicates, Request $request) {
$em = $this->getDoctrine()->getManager();
$form = $this->createFormBuilder()->getForm();
if ($form->handleRequest($request)->isValid()) {
$em->persist($prescriber);
$em->flush();
$this->addFlash('p_success', 'Prescriber has been created successfully');
return $this->redirectToRoute('prescriber');
}
// show confirm page
return $this->render('prescribers/form-step2.html.twig', array(
'h1_title' => 'Ajouter un nouveau prescripteur',
'form' => $form->createView(),
'p' => $prescriber,
'duplicates'=> $duplicates
));
}
Я думаю, что проблема связана с тем, что у меня есть 2 формы отправки...