我有一个模态用户帐户的注册表格,并从我的模板'base.html.twig'中调用。我希望如果提交后存在表单错误(在实体级别检查约束),我希望重新显示我的模式表单。
因此,为此,在我的控制器中处理注册,如果该表格无效,则创建一个会话变量。然后,在我的模板“ base.html.twig”中,检查会话变量是否存在。如果是,那么我将数据可见性属性在模式div级别传递给1。最后,在JavaScript中,如果此数据可见性属性为1,则显示上述div。
我的问题是,如果存在错误,则提交后表单不会自动重新显示。我必须自己单击按钮。
在这里,在屏幕快照中,尝试使我更好地理解的流程。
我单击帐户创建按钮:
我通过明确编码错误来完成模态形式:
我提交表格:
提交后,尽管存在错误,也不会重新显示该表格:
我必须单击“注册”按钮以再次显示表单:
这是有问题的,因为最终用户将不知道有错误,因此必须重新单击“注册”按钮。
这是我的代码。
在我的模板'base.html.twig'中:
...
{% if app.session.get('errorFomRegistration') %}
<div id="registrationModal" class="modal fade" role="dialog" data-visibility='1'>
{% else %}
<div id="registrationModal" class="modal fade" role="dialog" data-visibility='0'>
{% endif %}
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Sign up</h4>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<div>
{% if app.session.get('errorFomRegistration') %}
{{ include('_messages.html.twig') }}
{% endif %}
</div>
{{ render(controller('App\\Controller\\security\\SecurityController::registration', {'request': app.request})) }}
</div>
</div>
</div>
</div>
</div>
...
在我的控制器'SecurityController.php'中:
/**
* User registration
*
* @Route("/security/registration/{shortForm}", name="security.registration")
*
* @param bool $shortForm
* @param Request $request
* @param EntityManagerInterface $manager
* @param UserPasswordEncoderInterface $encoder
* @param AuthorizationCheckerInterface $authChecker
* @param \Swift_Mailer $mailer
* @param UserRepository $userRepository
*
* @return Response
*/
public function registration(bool $shortForm = false, Request $request, EntityManagerInterface $manager, UserPasswordEncoderInterface $encoder,
AuthorizationCheckerInterface $authChecker, \Swift_Mailer $mailer, UserRepository $userRepository): Response
{
$session = $this->get('session');
$session->set('errorFomRegistration', false);
...
$form->handleRequest($request);
if ($form->isSubmitted())
{
if ($form->isValid())
{
...
}
else
{
$session->set('errorFomRegistration', true);
\dump($session->get('errorFomRegistration'));
}
}
...
最后,在我的app.js中:
...
// Display the login modal form if there is an autentication error
var $registrationDiv = $('#registrationModal');
console.log('Before display');
if($registrationDiv.data('visibility') == '1')
{
console.log('Visible');
$registrationDiv.modal('show');
}
...
任何人都有让我摆脱这个问题的想法,我已经尝试了好几个星期?
谢谢您的帮助。
我在Laravel中做过同样的事情。如果需要,您需要在模式打开按钮上应用javascript click()方法。