symfony - 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">×</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>
是否有一个参数可以放入我的链接调用模态,以放置变量?
编辑:
Fabian 使用宏后,这是我的代码:
视图/宏/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">×</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 %}
问题:它删除了第一个包,而不是我要删除的包
解决方案
我建议您为您的模态使用宏。这个你可以随时重复使用。这看起来像这样:
{%- 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">×</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>
编辑
模态 ( ) 的 idid="#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 %}
推荐阅读
- c++ - C++ 问题 - 使用数组制作登录系统
- html - 为什么我有一个依赖于另一个使用 Bootstrap 4 的列?
- mysql - 如何获取列值不同的所有行?
- android - Android ActionBar/Toolbar 颜色在 Light 和 Dark 主题中不同
- c - 使用 fork() 时的打印输出行数
- database - 关于sqllite的一个简单问题,在学习过程中卡住了
- python - NameError:名称“公会”未定义。问题是什么?
- apache-kafka - 如何使生产者和消费者需要 Apache Kafka 客户端 ID?
- c# - OrientDb 查询执行时间
- javascript - 我无法让我的代码检查一个数字是否已经在数组中 | JavaScript