У меня есть форма регистрации для учетной записи пользователя в модальном режиме и вызвана из моего шаблона 'base. html .twig'. Я хотел бы, чтобы после отправки формы возникали ошибки формы (проверка ограничений на уровне сущности), я бы хотел, чтобы моя модальная форма отображалась повторно.
Итак, для этого в моем контроллере, обрабатывающем регистрацию Если форма недействительна, я создаю переменную сеанса. Затем в моем шаблоне 'base. html .twig' я проверяю, существует ли переменная сеанса. Если да, то я передаю атрибут видимости данных 1 на модальном уровне div. И наконец, в JavaScript, если этот атрибут видимости данных равен 1, я показываю указанный div.
Моя проблема заключается в том, что при наличии ошибок форма не отображается автоматически после отправки. Я должен сам нажать кнопку, чтобы сделать это.
Здесь, на скриншотах, поток, чтобы попытаться меня лучше понять.
Я нажимаю на кнопку создания учетной записи:
Я заполняю модальную форму, явно кодируя ошибки:
Я отправляю форма:
После отправки форма не отображается повторно, несмотря на наличие ошибок:
Мне нужно нажать на кнопку «Зарегистрироваться», чтобы снова отобразить форму:
Это проблематично c, поскольку конечный пользователь не узнает об ошибках и должен повторно щелкнуть кнопку «Зарегистрироваться».
Вот мой код.
В моем шаблоне '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'));
}
}
...
И, наконец, в моем приложении. 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');
}
...
У всех есть Идея вытащить меня из этой проблемы, над которой я пытался в течение нескольких недель?
Заранее благодарю за помощь.