Symfony 4 модальная форма - PullRequest
0 голосов
/ 20 мая 2019

У меня есть список автомобилей, у каждого автомобиля есть кнопка, и нажатие на кнопку позволяет мне получить доступ к модальной форме, чтобы написать билет на этот конкретный автомобиль.Пример: https://imgur.com/a/t82H9UT

Проблема в том, что у меня возникли некоторые проблемы при объединении модальной формы и формы внутри моей ветки.

Форма, которую я должен заполнить, имеет всего 4 входа.первые 2 должны быть предварительно заполнены данными, переданными из машины, связанными с нажатой кнопкой, остальные я могу заполнить самостоятельно.Но я не знаю, как передать эту информацию из ветки в форму.

Что я сделал до сих пор:

  • У меня есть список,моя кнопка в файле index.html.twig, и у меня есть форма внутри модели в отдельной ветке с именем modal.html.twig, я также сделал контроллер.

Проблема: При нажатии на кнопку ничего не отобразится.

Мой код:

index.html.twig

{% block title %}Parking index{% endblock %}

{% block body %}


  <table id="file_export" class="table table-striped table-bordered">
    <tbody>
      {% for voitures in voiture %}            
          <tr>
            <td>
              {{ voitures.matricule }}
            </td>
            <td>
              {{ voitures.parking.libelle }}         
            </td>
            <td>
             <span class="timer" data-expires="{{ voitures.getExpiresAt() }}"></span>
            </td>
            <td>
            <button type="button" class="btn btn-dark" href="{{ path('new_ticket', {'id': voitures.id},{'parking': voitures.parking.id}) }}" data-toggle="modal" data-target="#createmodel" data-whatever="{{ voitures.id }}">ticket</button>
            </td>
          </tr>
        {% endif %}
     {% endfor %}

Мой модал.html.twig form:

<div class="modal fade" id="createmodel" tabindex="-1" role="dialog" aria-labelledby="createModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <form>
                   <div class="modal-header">
                    <h5 class="modal-title" id="createModalLabel"><i class="ti-marker-alt m-r-10"></i> ticket for:</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                    </button>
                   </div>
                   <div class="modal-body">
                    {{ form_start(form) }}

                        {{ form_row(form.Matricule, { 'label': 'Matricule' }) }}
                        {{ form_row(form.Parking, { 'label': 'Matricule' }) }}
                        {{ form_row(form.Date, { 'label': 'Date' }) }}
                        {{ form_row(form.montant, { 'label': 'Montant' }) }}

                        <button class="btn">{{ button_label|default('Add') }}</button>
                    {{ form_end(form) }}



                   </div>
                   <div class="modal-footer">
                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                        <button type="submit" class="btn btn-success"><i class="ti-save"></i> Save</button>
                   </div>
            </form>
    </div>
</div>

и, наконец, мой контроллер (который не работает)

    /**
     * @Route("/ticket", name="new_ticket", methods={"GET","POST"})
     */
    public function newTicket(Request $request): Response
    {
        $ticket = new Ticket();
        $form = $this->createForm(TicketType::class, $ticket);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->addFlash('success','ammende added !');

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

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

        return $this->render('Agent/modal.html.twig', [
            'ticket' => $ticket,
            'form' => $form->createView(),
        ]);
    }

Это решение, которое я нашел: Я использовал renderинтегрировать форму в моем индексе, это не идеально, но работает:

         {{render(controller('App\\Controller\\AgentController:newTask')) }}

1 Ответ

2 голосов
/ 20 мая 2019

В вашем коде несколько ошибок. Первая ошибка заключается в том, что вы объявили две формы одна внутри другой. {{ form_start(form) }} печатает <form> тег. Вторая проблема заключается в том, что вы не связали форму с автомобилем. Например, вы должны сделать модал для каждой машины и указать маршрут, куда вы хотите отправить.

оставляю здесь пример

 {% for voitures in voiture %}            
          <tr>
            <td>
              {{ voitures.matricule }}
            </td>
            <td>
              {{ voitures.parking.libelle }}         
            </td>
            <td>
             <span class="timer" data-expires="{{ voitures.getExpiresAt() }}"></span>
            </td>
            <td>
            <button type="button" class="btn btn-dark" href="" data-toggle="modal" data-target="#createmodel" data-whatever="{{ voitures.id }}">ticket</button>
            </td>
          </tr>
          {% set submit_url = path('new_ticket', {'id': voitures.id},{'parking': voitures.parking.id}) %}
          {% include 'modal_form.html.twig' wiht {url: submit_url} 
     {% endfor %}

И модально это может быть:

<div class="modal fade" id="createmodel" tabindex="-1" role="dialog" aria-labelledby="createModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
           {{ form_start(form, {'action': url)}) }}
                   <div class="modal-header">
                    <h5 class="modal-title" id="createModalLabel"><i class="ti-marker-alt m-r-10"></i> ticket for:</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                    </button>
                   </div>
                   <div class="modal-body">
                        {{ form_row(form.Matricule, { 'label': 'Matricule' }) }}
                        {{ form_row(form.Parking, { 'label': 'Matricule' }) }}
                        {{ form_row(form.Date, { 'label': 'Date' }) }}
                        {{ form_row(form.montant, { 'label': 'Montant' }) }}
                   <div class="modal-footer">
                   </div>
                        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                        <button type="submit" class="btn btn-success"><i class="ti-save"></i> Save</button>
                   </div>
             {{ form_end(form) }}
        </div>    
    </div>
</div>
...