Как закрыть FancyBox, содержащий форму Symfony после отправки формы? Я не хочу закрывать fancybox после немедленного нажатия кнопки, так как форма может вызвать ошибки.
Кажется, что одно решение использует две функции Symfony (с двумя различными маршрутами) в контроллере:
- Один для рендеринга формы
- Один для возврата ответа "json" после отправки формы.
Таким образом, ответ содержит ошибки. Затем в функции Ajax, согласно ошибкам, FancyBox может быть закрыт.
Я видел два недостатка в этом решении:
- Будет ли форма совершать два звонка при каждой отправке? Мы нарушаем логику Symfony?
- Требуется ли для возврата ответа json отображение ошибок вручную в форме?
Это лучший способ выступить?
Сильфон - это структура двух функций в контроллере:
/**
* @param Request $request
* @return Response
* @Route("/rendering_form", name="renderingForm")
*/
public function renderingForm(Request $request){
// ... Data request for rendering
// Building form for rendering
$form = $this->createMyForm()->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
return $this->redirectToRoute('home');
}
return $this->render('@Map/Book/book.html.twig',
array( // data for rendering ,
"form" => $form->createView()
));
/**
* @param Request $request
* @return Response
* @Route("/rendering_form/validation", name="validationRenderingForm")
*/
public function validationRenderingForm(Request $request){
$form = $this->createMyForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$errors = $this->getDataErrorCustom($data);
if ($errors){
$response = ['status' => 'fail',
'errors' => $errors ];
}else{
$response = ['status' => 'success'];
}
}else {
$response = ["status" => 'fail',
"errors" => $form->getErrors()];
}
$reponse = new Response(json_encode($reponse));
$reponse->headers->set('Content-Type', 'application/json');
return $reponse;
}