【发布时间】:2026-02-15 18:50:01
【问题描述】:
我写了一个函数,它有两种形式,分别激活,保持相同的实体。第一个为输入字段激活,第二个为随机生成的字段激活。
但是当我点击提交时,它会一个接一个地激活两个表单。如果使用条件来防止这种情况,但我似乎它不起作用。
我的代码:
$id = $request->get('id');
$user = $this->container->get('account')->getUserRepository()->find($id);
$form1 = $this->createFormBuilder()
->add('password', PasswordType::class, array(
'label' => 'Enter New Password',
'attr' => ['class'=>'form-control']))
->add('save', SubmitType::class, array(
'label' => 'Send', 'attr' => ['class' => 'btn btn-primary action-save']
))
->getForm();
$form2 = $this->createFormBuilder()
->add('password', PasswordType::class, array(
'label' => 'Generate New Password',
'disabled'=> true,
'attr' => ['class'=>'form-control']))
->add('save', SubmitType::class, array(
'label' => 'Send',
'attr' => ['class' => 'btn btn-primary action-save']
))
->getForm();
$form1->handleRequest($request);
if($form1->isSubmitted() && $form1->isValid()) {
$this->addFlash(
'notice',
'You successfully changed the password!'
);
$data = $form1->getData();
$new_password = $data['password'];
$encoder = $this->container->get('security.encoder_factory')->getEncoder($user);
$new_pwd_encoded = $encoder->encodePassword($new_password);
$oneTimePsw = '';
$user->setPassword($new_pwd_encoded);
$manager = $this->getDoctrine()->getManager();
$manager->flush();
}
$form2->handleRequest($request);
if($form2->isSubmitted() && $form2->isValid()) {
$this->addFlash(
'notice',
'Password is successfully generated!'
);
$data = $form2->getData();
$new_password = $data['password'];);
$new = $this->get('member.account')->generateRandomPassword();
$oneTimePsw = '';
$user->setPassword($new);
$manager = $this->getDoctrine()->getManager();
$manager->flush();
}
return $this->render('@AdminTemplates/admin/reset_password.html.twig', array(
'form1' => $form1->createView(),
'form2' => $form2->createView()
));
My twig
<div id="setPassword" style="display:none;">
{{ form_start(form1) }}
{{ form_end(form1) }}
</div>
<div id="generatePassword" style="display:none;">
{{ form_start(form2) }}
{{ form_end(form2) }}
</div>
【问题讨论】:
-
请发布您的
reset_password.html.twig文件。您可能已经将两个表单相互嵌套,这样在提交一个表单时,另一个表单也会被触发。 -
已更新。我认为模板还可以。 @MaximilianKaske
-
好的,如果两个表单名称不同,请查看您的网络检查器。在我看来,这两种形式都有相同的形式名称。如果是这样,提交一个将自动提交另一个。
-
@MaximilianKaske 我认为这是表单的 id 而不是名称。