Форма Symfony не передает данные - пустой запрос POST - PullRequest
0 голосов
/ 24 мая 2019

Я новичок в шаблонах Symfony и Twig, и я борюсь с проблемой отправки данных с помощью формы, созданной formbuilder в Symfony. При нажатии кнопки «Создать» данные не отправляются. Я создал шаблон addEmployee.html.twig, который расширяет базовый шаблон с помощью панели навигации и боковой панели.

Я заметил, что эта форма работает, только если я не расширяю базу. Таким образом, она создаст правильный запрос и отправит форму только в том случае, если шаблон, в котором создается форма, не имеет родительского шаблона.

Я не знаю, почему расширение шаблона base.html.twig привело к потере запроса, и я не знаю, как заставить его работать с уже созданными шаблонами расширения.

Функция newEmployee из MainController.php

  /**
     * @Route("/employee/add", name="add_employee")
     * @Method({"GET","POST"})
     */
    public function newEmployee(Request $request){


      $employee = new Employee();

      $form = $this->createFormBuilder($employee)
          ->setMethod('POST')
          ->add('employeeNumber',TextType::class, array('attr' => array('class'=>'form-control')))
          ->add('name',TextType::class, array('attr' => array('class'=>'form-control')))
          ->add('phone',TextType::class, array('attr' => array('class'=>'form-control')))
          ->add('pool',TextType::class, array('attr' => array('class'=>'form-control')))
          ->add('save',SubmitType::class, array('label'=>'Create','attr'=>array('class'=> 'btn btn-primary mt-3')))
          ->getForm();

          if ($request->isMethod('POST')) {
            $form->submit($request->request->get($form->getName()));
          }


      if($form->isSubmitted() && $form->isValid()){

          $employee=$form->getData();

          $entityManager= $this->getDoctrine()->getManager();
          $entityManager->persist($employee);
          $entityManager->flush();

          return $this->redirectToRoute('homepage');
      }

          return $this->render('/Employee/addEmployee.html.twig',array('form'=>$form->createView()));

  }

addEmployee.html.twig '

{% extends 'base.html.twig' %}

{% block title%} New Article{% endblock %}

{% block body%}

{{form_start(form)}}
{{form_widget(form)}}
{{form_end(form)}}

{% endblock %}

base.html.twig

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}TL Manage{% endblock %}</title>        
        {% block stylesheets %}
        <link rel="stylesheet" href="https://bootswatch.com/4/cosmo/bootstrap.min.css">
        <link rel="stylesheet" href="../css/style.css">
        {% endblock %}
    </head>
    <body>

    {% include 'inc/navbar.html.twig' %}
    {% include  'inc/sidebar.html.twig' %}
     <div id="content">
            {% block body %}{% endblock %}
     </div>

    {% block javascript %}
    <!-- Icons.JS -->
    <script src="https://unpkg.com/ionicons@4.5.5/dist/ionicons.js"></script>
    <!-- JQUERY -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <!-- Popper.JS -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js" integrity="sha384-cs/chFZiN24E4KMATLdqdvsezGxaGsi4hLGOzlXwp5UZB1LY//20VyM2taTB4QvJ" crossorigin="anonymous"></script>
    <!-- Bootstrap JS -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js" integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm" crossorigin="anonymous"></script>
    <!-- jQuery Custom Scroller CDN -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.concat.min.js"></script>
    <script src="js/main.js"></script>
     {% endblock %}
    </body>
</html>

Вместо перенаправления на домашнюю страницу и вставки данных это то, что происходит, если я отправляю форму

и после удаления {% extends 'base.html.twig' %} из addEmployee.html.twig 'форма работает как задумано. Любые идеи, как заставить его работать с остальными частями пользовательского интерфейса?

1 Ответ

0 голосов
/ 25 мая 2019

Я сам нашел причину и решение, и мне стало неловко ...

Оказывается, у меня была другая форма в боковой панели, которая была включена в базовый шаблон, и я не закрывал тег <form> ... так было так:

вкл / sidebar.html.twig

 <form class="employee-Finder">
       <input class="finder-input" type="text">
 <form> <!-- this was the cause -->

Таким образом, кнопка отправки из первой формы, вероятно, отправляла кнопку на боковой панели, которая по умолчанию имеет метод get. После закрытия тега все работает нормально. Спасибо за все ваши предложения.

...