伙计们,我在同一页面上有两次相同的表单(我试图阅读很多具有相同问题的问题,但是并不能解决我的问题...)我的问题是当我发送一种发送表单时另一个也是,具有相同的数据...
所以有我的控制者(表单正在发送邮件):
$defaultData = array('message' => 'Mail');
$form2 = $this->createFormBuilder($defaultData)
->add('content', TextareaType::class)
->getForm();
$form2->handleRequest($request);
if ($form2->isSubmitted() && $form2->isValid()) {
$message = \Swift_Message::newInstance()
->setSubject('Demande')
->setTo('test@gmail.com')
->setFrom($loggedAs->getEmail())
->setBody($this->render('mail_templates/probleme.html.twig', array(
'nom' => $loggedAs->getFirstName(),
'prenom' => $loggedAs->getSecondName(),
'content' => $form2["content"]->getData(),
)), 'text/html');
$this->get('mailer')->send($message);
$this->get('session')->getFlashBag()->add('success', "Rapport envoyé");
}
$defaultData2 = array('message2' => 'Mail2');
$form3 = $this->createFormBuilder($defaultData2)
->add('content', TextareaType::class)
->getForm();
$form3->handleRequest($request);
if ($form3->isSubmitted() && $form3->isValid()) {
$message2 = \Swift_Message::newInstance()
->setSubject('Signaler un problème')
->setTo('test@gmail.com')
->setFrom($loggedAs->getEmail())
->setBody($this->render('mail_templates/probleme.html.twig', array(
'nom' => $loggedAs->getFirstName(),
'prenom' => $loggedAs->getSecondName(),
'content' => $form3["content"]->getData(),
)), 'text/html');
$this->get('mailer')->send($message2);
$this->get('session')->getFlashBag()->add('success', "Rapport envoyé");
}
和我的html(树枝):
{{ form_start(form2) }}
{{ form_widget(form2.content) }}
{% if form_errors(form2.content) %}
<div class="alert alert-danger" role="alert">
{{ form_errors(form2.content) | striptags }}
</div>
{% endif %}
<br/>
<button type="submit" class="btn btn-danger btn-rounded">Envoyer</button>
{{ form_end(form2) }}
{{ form_start(form3) }}
{{ form_widget(form3.content) }}
{% if form_errors(form2.content) %}
<div class="alert alert-danger" role="alert">
{{ form_errors(form3.content) | striptags }}
</div>
{% endif %}
<br/>
<button type="submit" class="btn btn-danger btn-rounded">Envoyer</button>
{{ form_end(form3) }}
答案 0 :(得分:1)
您需要命名表单并分别处理。 您可以在MailFormType类中移动表单构建代码,并创建2个命名表单:
$form1 = $this->get('form.factory')
->createNamedBuilder('form1', MailFormType::class)
->getForm();
$form2 = $this->get('form.factory')
->createNamedBuilder('form2', MailFormType::class)
->getForm();
if ($request->request->has('form1') {
// handle form1
}
if ($request->request->has('form2') {
// handle form2
}
答案 1 :(得分:0)
事实上,正如Mihai Aurelian所说,您需要命名这两种表格才能正确处理它们。从已发布的html代码中可以看到,当前您有两种形式,其中包含名称完全相同的输入。这就是为什么似乎两个表单都使用完全相同的数据提交的原因。由于您是在控制器内部而不是在单独的Form Type类中构建表单,因此应该具有以下内容:
use Symfony\Component\Form\Extension\Core\Type\FormType;
public function yourAction(Request $request, FormFactoryInterface $formFactory) {
$defaultData = array('message' => 'Mail');
$form2 = $formFactory->createNamedBuilder('form2', FormType::class, $defaultData)
->add('content', TextareaType::class)
->getForm();
$defaultData2 = array('message2' => 'Mail2');
$form3 = $formFactory->createNamedBuilder('form3', FormType::class, $defaultData2)
->add('content', TextareaType::class)
->getForm();
$form2->handleRequest($request);
if ($form2->isSubmitted() && $form2->isValid()) {
// handle form2
}
$form3->handleRequest($request);
if ($form3->isSubmitted() && $form3->isValid()) {
// handle form3
}
}
编辑:我修复了操作中缺少的$ formFactory服务。但是,您应该通过在操作中键入提示$ formFactory参数来自动装配来获得FormFactory服务,而不是使用$this->get('form.factory')
直接从服务容器中获取它。您应该避免以这种方式在控制器内部获取服务,而是尽可能使用自动装配。