提交表单后,如何关闭包含Symfony表单的FancyBox?我不想在立即单击按钮后关闭fancybox,因为表单可能会引发错误。
一种解决方案似乎在控制器中使用两个Symfony函数(具有两个不同的路由):
通过这种方式,响应中包含错误。然后,在Ajax函数中,根据错误,可以关闭FancyBox。
在此解决方案中,我看到了两个缺点:
这是最好的表演方式吗?
下面是Controller中两个功能的结构:
/**
* @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;
}
答案 0 :(得分:0)
fancybox提供了一个方便的beforeClose
回调,您可以使用它来停止关闭模式,只需返回false
。因此,如果您选择使用ajax提交并验证表单,则可以在等待响应时显示加载图标(使用hideLoading
进行隐藏):
$.fancybox.getInstance().showLoading( $.fancybox.getInstance().current );
并成功结束:
$.fancybox.getInstance().close()
对于php部分,我建议遵循dbrumann注释。