Symfony3 模态框变量传递异常问题求助
看起来你遇到的核心问题是模态框删除时的参数传递和常规删除不一致,我帮你梳理几个关键排查点:
首先,我注意到Package ID的引用在两种删除方式里不一样,这大概率是首要问题:
- 常规删除用的是
uneInfo['package'].id - 模态框里却用了
uneInfo.id
如果uneInfo是包含package对象的父级数据结构,直接用uneInfo.id拿到的肯定不是Package的正确ID,这会直接导致删除请求指向错误资源,甚至连带干扰type参数的处理。
接下来针对typeUtilisateur的传递问题,咱们一步步来:
1. 先修正Package ID的引用
把模态框相关的ID和路径参数都改成和常规删除一致的写法:
<button class="btn btn-danger" type="button" data-toggle="modal" data-target="#deleteModal-{{ uneInfo['package'].id }}"> <span class="glyphicon glyphicon-remove"></span> Supprimer </button> {{ macro.create_delete_modal( 'deleteModal-'~uneInfo['package'].id, 'Voulez-vous vraiment supprimer ce package ? ', path('paquets_delete', {'id':uneInfo['package'].id, 'type': unType['typeUtilisateur']}) ) }}
这里要保证模态框的ID和触发按钮的data-target完全对应,避免不同Package的模态框ID冲突。
2. 验证typeUtilisateur的作用域是否正确
你调用模态框宏时,unType['typeUtilisateur']这个变量是否在当前循环/上下文里?比如如果这段代码是嵌套循环(遍历Package再遍历其关联的User Type),要确保生成每个模态框时,unType是当前循环的那个类型,而不是最后一次循环的值(Twig的循环变量在闭包/宏里可能会有变量污染问题)。
可以临时给模态框的提示文本加上调试信息:
{{ macro.create_delete_modal( 'deleteModal-'~uneInfo['package'].id, 'Voulez-vous vraiment supprimer ce package ? Type ID: '~unType['typeUtilisateur'], path('paquets_delete', {'id':uneInfo['package'].id, 'type': unType['typeUtilisateur']}) ) }}
打开模态框就能直接看到显示的Type ID是否正确,判断是参数传递到宏之前就错了,还是宏内部的问题。
3. 对比两种删除方式的链接地址
右键点击模态框里的「Supprimer」按钮,复制链接地址,和常规删除按钮的链接做对比:
- 常规删除链接应该是类似
/paquets/delete?id=123&type=456 - 如果模态框生成的链接和上面不一致,就实锤了变量传递错误。
4. 避免模态框ID冲突(针对多Type场景)
因为一个Package归属多个User Type,建议给模态框ID加上Type后缀,避免同一个Package下不同Type的模态框共用ID:
<button class="btn btn-danger" type="button" data-toggle="modal" data-target="#deleteModal-{{ uneInfo['package'].id }}-{{ unType['typeUtilisateur'] }}"> <span class="glyphicon glyphicon-remove"></span> Supprimer </button> {{ macro.create_delete_modal( 'deleteModal-'~uneInfo['package'].id~'-'~unType['typeUtilisateur'], 'Voulez-vous vraiment supprimer ce package du type '~unType['typeUtilisateur']~' ? ', path('paquets_delete', {'id':uneInfo['package'].id, 'type': unType['typeUtilisateur']}) ) }}
这样每个「Package+Type」组合都会有唯一的模态框,不会出现点击删除某个Type却弹出另一个Type的确认框的问题。
先从修正Package ID开始排查,大部分情况下这个问题解决后,Type参数的传递也会恢复正常。如果还有问题,再通过调试文本和链接对比定位具体环节。
内容的提问来源于stack exchange,提问作者eronn

