Symfony 3.4 – Передача переменных в моих модальных окнах?

Я хотел бы знать, можно ли передавать переменные в модальном режиме с помощью Symfony?

До интеграции модального окна моя строка выглядела так:

<a href = "{{ path('paquets_delete', { 'id': uneInfo.id, 'type':unType['typeUtilisateur'] }) }}" class = "btn btn-danger"><span class = "glyphicon glyphicon-remove"></span> Supprimer</a>

Он используется для удаления строки из моей базы данных.

Я хотел добавить запрос подтверждения модального знака. Затем я добавил модальное окно, и теперь у меня есть это:

<a href = "#" data-toggle = "modal" data-target = "#mymodal" class = "btn btn-danger"><span class = "glyphicon glyphicon-remove"></span> Supprimer</a>

Модальное:

<div class = "modal" id = "mymodal">
        <div class = "modal-dialog" role = "document">
          <div class = "modal-content">
            <div class = "modal-header">
              <h5 class = "modal-title">Modal title</h5>
              <button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close">
                <span aria-hidden = "true">&times;</span>
              </button>
            </div>
            <div class = "modal-body">
              <p>Modal body text goes here.</p>
            </div>
            <div class = "modal-footer">
              <a href = "#HereIWantMyVariablesForMyControllerPathRendering" type = "button" class = "btn btn-primary">Save changes</button>
              <button type = "button" class = "btn btn-secondary" data-dismiss = "modal">Close</button>
            </div>
          </div>
        </div>
      </div>

Есть ли параметр, который нужно добавить в мою ссылку, вызывающую модальный режим, для размещения переменных?

Обновлено:

После использования макросов Фабианом вот мой код:

Представления/макрос/macro.html.twig:

{%- macro create_delete_modal(body, deleteLink) -%}
    {% filter spaceless %}
        <div id = "deleteModal" class = "modal fade" role = "dialog">
            <div class = "modal-dialog">
                <div class = "modal-content">
                    <div class = "modal-header">
                        <button type = "button" class = "close" data-dismiss = "modal">&times;</button>
                        <h4 class = "modal-title">Supprimer?</h4>
                    </div>
                    <div class = "modal-body">
                        <p>{{ body }}</p>
                    </div>
                    <div class = "modal-footer">
                        <a href = "{{ deleteLink }}" class = "btn btn-danger">Supprimer</a>
                        <button type = "button" class = "btn btn-default" data-dismiss = "modal">Fermer</button>
                    </div>
                </div>
            </div>
        </div>
    {% endfilter %}
{%- endmacro -%}

Функция удаления контроллера:

/**
 * Suppression d'un package | Suppression d'un type d'utilisateur attribué à un package
 *
 * @Route("/{id}/{type}/delete", name = "paquets_delete")
 */
public function deleteAction(Request $request, $id, $type)
{
    $em = $this->getDoctrine()->getManager();
    $unPaquet = $em->getRepository('PagesBundle:Paquet')->find($id); //Récupération du package

    $nbTypes = count($unPaquet->getTypeUser()); //Récupération du nombre de TypeUser auquel est attribué le package


    if ($nbTypes == 1)
    {
        $em->remove($unPaquet); // Si un seul destinataire, on supprimme le package.
    }

    else if ($nbTypes > 1)
    {
        $am = $this->getDoctrine()->getManager();
        $leType = $am->getRepository('PagesBundle:TypeUser')->findByTypeUtilisateur($type);
        $unPaquet->deleteTypeFromTypesUser($leType[0]); // Si plusieurs destinataires, on supprimme juste le type d'utilisateur passé en paramètre
    }

    $em->flush(); // Validation



    $this->getDoctrine()->getManager()->getRepository('PagesBundle:User')->updateNbDDLAll("dec"); // A la suppression d'un package, on décrémente le nombre de télécharme

    $this->addFlash( // Message d'information à l'admin
        'info_delete',
        'Package supprimée !'
    );

    return $this->redirectToRoute('paquets_index'); // Actualisation de la page
}

index.html.twig :

{% extends 'base.html.twig' %}
{% import 'macro/macro.html.twig' as macro %}


{% block body %}
<br/>
<a href = "{{ path('paquets_new') }}" class = "btn btn-primary btn-lg btn-block"> <span class = "glyphicon glyphicon-plus"></span> Ajouter un package</a>
<br/> <br/>
{% for unType in typesUser %}
{% set i=loop.index0 %}
<h1 class = "text-primary text-center">{{unType['typeUtilisateur']}} <span class = "badge badge-primary badge-pill w3-small">{{ tabInfos[i]|length }}</span></h1>
<br />

<table class = "table table-stripped">
    <thead>
        <tr>
            <th>Id</th>
            <th>Titre</th>
            <th>Package</th>
            <th>Notice</th>
            <th>Commentaire</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        {% for uneInfo in tabInfos[i] %}
        <tr>
            <td><a href = "{{ path('paquets_show', { 'id': uneInfo.id }) }}">{{ uneInfo.id }}</a></td>
            <td>{{ uneInfo.titre }}</td>
            <td><a href = "{{ path('paquet_fileDDL', { 'id': uneInfo.id, 'type': 'package'}) }}"</a>{{ uneInfo.urlPaquet }} </td>
            <td><a href = "{{ path('paquet_fileDDL', { 'id': uneInfo.id, 'type': 'notice'}) }}"</a>{{ uneInfo.urlNotice }} </td>
            <td>{{ uneInfo.commentaire }}</td>
            <td>
                <a href = "{{ path('paquets_edit', { 'id': uneInfo.id }) }}" class = "btn btn-warning"><span class = "glyphicon glyphicon-edit"></span> Modifier</a>
                {#<a href = "{{ path('paquets_delete', { 'id': uneInfo.id, 'type':unType['typeUtilisateur'] }) }}" class = "btn btn-danger"><span class = "glyphicon glyphicon-remove"></span> Supprimer</a> #}
                <button class = "btn btn-danger" type = "button" data-toggle = "modal" data-target = "#deleteModal"><span class = "glyphicon glyphicon-remove"></span> Supprimer</button>
                {{ macro.create_delete_modal('Voulez-vous vraiment supprimer ce package ? ', path('paquets_delete', {'id':uneInfo.id, 'type': unType['typeUtilisateur']})) }}
            </td>
        </tr>
        {% endfor %}
    </tbody>
</table>
<br/><br/>


{% endfor %}
{% endblock %}

Самая важная часть html.twig:

{% for uneInfo in tabInfos[i] %}
        <tr>
            <td><a href = "{{ path('paquets_show', { 'id': uneInfo.id }) }}">{{ uneInfo.id }}</a></td>
            <td>{{ uneInfo.titre }}</td>
            <td><a href = "{{ path('paquet_fileDDL', { 'id': uneInfo.id, 'type': 'package'}) }}"</a>{{ uneInfo.urlPaquet }} </td>
            <td><a href = "{{ path('paquet_fileDDL', { 'id': uneInfo.id, 'type': 'notice'}) }}"</a>{{ uneInfo.urlNotice }} </td>
            <td>{{ uneInfo.commentaire }}</td>
            <td>
                <a href = "{{ path('paquets_edit', { 'id': uneInfo.id }) }}" class = "btn btn-warning"><span class = "glyphicon glyphicon-edit"></span> Modifier</a>
  
                <button class = "btn btn-danger" type = "button" data-toggle = "modal" data-target = "#deleteModal"><span class = "glyphicon glyphicon-remove"></span> Supprimer</button>
                {{ macro.create_delete_modal('Voulez-vous vraiment supprimer ce package ? ', path('paquets_delete', {'id':uneInfo.id, 'type': unType['typeUtilisateur']})) }}
            </td>
        </tr>
        {% endfor %}

Symfony 3.4 – Передача переменных в моих модальных окнах?

Проблема: он удаляет первые пакеты, а не те, которые я хочу удалить

Посмотрите еще раз на мою правку

Fabian Schmick 08.04.2019 12:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
1
892
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы порекомендовал вам использовать макрос для вашего модального окна. Этот вы можете использовать повторно каждый раз, когда захотите. Это будет выглядеть примерно так:

{%- macro create_delete_modal(body, deleteLink) -%}
    {% filter spaceless %}
        <div id = "deleteModal" class = "modal fade" role = "dialog">
            <div class = "modal-dialog">
                <div class = "modal-content">
                    <div class = "modal-header">
                        <button type = "button" class = "close" data-dismiss = "modal">&times;</button>
                        <h4 class = "modal-title">Supprimer?</h4>
                    </div>
                    <div class = "modal-body">
                        <p>{{ body }}</p>
                    </div>
                    <div class = "modal-footer">
                        <a href = "{{ deleteLink }}" class = "btn btn-danger">Supprimer</a>
                        <button type = "button" class = "btn btn-default" data-dismiss = "modal">close</button>
                    </div>
                </div>
            </div>
        </div>
    {% endfilter %}
{%- endmacro -%}

И использовать его:

{% import 'macro/macro.html.twig' as macro %}

{{ macro.create_delete_modal('Are you sure you want to delete this?',  path('paquets_delete', { 'id': uneInfo.id, 'type':unType['typeUtilisateur'] }) }}

<button class = "btn btn-danger" type = "button" data-toggle = "modal" data-target = "#deleteModal"><span class = "glyphicon glyphicon-remove"></span> Supprimer</button>


Редактировать

Идентификатор модального окна (id = "#deleteModal") больше не уникален, так как вы перебираете его. Просто добавьте к нему текущий индекс цикла, и он будет работать так, как ожидалось.

{%- macro create_delete_modal(id, body, deleteLink) -%}
    {% filter spaceless %}
        <div id = "{{ id }}" class = "modal fade" role = "dialog">

И в вашем цикле передайте индекс цикла:

{% for uneInfo in tabInfos[i] %}
    <tr>
        <td>
            <button class = "btn btn-danger" type = "button" data-toggle = "modal" data-target = "#deleteModal-{{ uneInfo.id }}"><span class = "glyphicon glyphicon-remove"></span> Supprimer</button>
            {{ macro.create_delete_modal('deleteModal-'~uneInfo.id, 'Voulez-vous vraiment supprimer ce package ? ', path('paquets_delete', {'id':uneInfo.id, 'type': unType['typeUtilisateur']})) }}
        </td>
    </tr>
{% endfor %}

Здравствуйте и спасибо за ваш ответ! Супер система макросов! Так что я использовал то, что вы мне дали. Однако, когда я нажимаю кнопку удаления, учитывается не текущий элемент, а самый первый элемент списка. Я отредактирую свой пост, чтобы лучше объяснить с помощью изображений и кода. Но по-моему, это ошибка с моей стороны, но я не вижу, где

Agar io FR 08.04.2019 11:44

Уже намного лучше! Он фактически удаляет те, которые я прошу, но до определенного предела. Когда в каждом типе пользователя есть только один пакет (пакет для CIRCO и пакет для 1-й степени (см. мой скриншот в моем посте)), ну, если я решу удалить пакет для 1-й степени, он удалит пакет для ЧИРКО. Будет ли это происходить из цикла, когда в каждом типе остается только один элемент? Или, может быть, ошибка в моем коде, которую я только сейчас обнаружил?

Agar io FR 08.04.2019 12:06

кажется, это происходит из макроса. Я протестировал свои методы удаления без использования модального окна, и оно работает хорошо. Что-то не то не попало бы в петлю?

Agar io FR 08.04.2019 12:16

Посмотрите на мое редактирование, проблема была в родительском цикле, но теперь это должно быть решено.

Fabian Schmick 08.04.2019 12:21

Действительно, использование anInfo.id кажется хорошим решением! Однако после изменения этого ничего не происходит, когда я нажимаю кнопку удаления в своем индексе (первый, который отображает модальное окно), это очень странно.

Agar io FR 08.04.2019 12:32

Ок, это я, опечатка. Тем не менее, проблема вернулась, на этот раз, когда я хочу удалить пакет 1-й степени, он немедленно удаляет меня 1-м в списке CIRCO. Обновлено: теперь все в порядке, решительно, я снова сделал ошибку! Вроде все работает, большое спасибо за помощь!

Agar io FR 08.04.2019 12:34

Другие вопросы по теме