Две формы на одной странице - PullRequest
0 голосов
/ 01 октября 2018

Эй, ребята, у меня дважды одна и та же форма на одной странице (я пытался прочитать много вопросов с одной и той же проблемой, но это не решило мою проблему ...) моя проблема в том, что когда я отправляю одну форму, которая отправляетдругой тоже, с такими же данными ...

Итак, есть мой контроллер (форма отправляет письмо):

$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) }}

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Действительно, как сказал Михай Аврелиан, вам нужно назвать две формы, чтобы правильно с ними обращаться.Как видно из опубликованного 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
     }
}

EDIT : я исправил отсутствующую службу $ formFactory издействие.Но вы должны получить сервис FormFactory с помощью автоматической разводки, указав аргумент $ formFactory в своем действии, вместо того, чтобы получать его напрямую из контейнера служб, используя $this->get('form.factory').Вы должны избегать получения сервисов внутри контроллера таким образом, предпочитайте автоматическое подключение, когда это возможно.

0 голосов
/ 01 октября 2018

Вам нужно назвать свои формы и обрабатывать их отдельно.Вы можете переместить код создания формы в класс 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...